云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 一段代码演示C++根据路径判定是目录还是文件,文件搜索,文件夹遍历等问题

一段代码演示C++根据路径判定是目录还是文件,文件搜索,文件夹遍历等问题

  • 62 次阅读
  • 3 次下载
  • 2026/4/24 7:52:56

一段代码演示C++根据路径判定是目录还是文件,文件搜索,文件

夹遍历等问题

如何根据路径确定其对应的是一个文件目录还是单纯的文件?如果用Java,这个问题很容易解决,直接调用现成的封装好的判定函数就可以了,但是C++却没有。怎么办?刚开始想通过判定路径里面是否含有“.”号来确定其实目录还是文件,但后来发现此路不通。为什么?问题就出在Windows下面文件夹的命名规则当中--Windows文件夹命名规则没有限定其不可以使用“.”号。比如,你完全可以将一个文件夹命名为“文件夹.文件夹”。这时候如果单纯的根据“.”号去判定,那结果可定时大错特错,你的程序将很容易的认为这个地址里面住的就是一个“文件”!再严重点,你讲一个文件夹命名为“文件夹.txt”(这事完全可以的),如果按上面方法,结果很有可能是你将一个文件夹认为是一个txt文本文档。所以根据“.”号来解决这个问题全是胡扯!!!

后来经过一番查找,发现在Windows下面有一个标志位_S_IFDIR(linux下面是S_IFDIR )用来标记文件目录。如果是目录的话,该位就会被系统设置。至此以上问题的判定方法就很明确了,根据路径查询其对应的_S_IFDIR标志位即可。具体实现记录如下:

// Find.cpp : 定¨义?控?制?台?应畖用?程ì序?的?入?口ú点?。£ //

#include \ #include \ #include \ #include #include #include \ #include using namespace std; string strWildcard=\;

//判D定¨给?定¨的?源′文?件t名?是?否?以?某3字?符?串?结á束? //sourc_str 源′文?件t名? //end_str 结á束?符?

bool EndWith(string source_str,string end_str){ }

void Find(string lpszFileName)

if (source_str.rfind(end_str)==(source_str.length()-end_str.length())) { }

return false;

return true;

{

struct _stat fileStat; //查é找?下?一?个?文?件t

while (_findnext(iFind, &fileinfo)==0/*iFind!=-1*/) {

//找?到?文?件t的?路·径?

string strFilePath = strWildcard+fileinfo.name; string oldPath=strWildcard;//暂Y存?父?级?目?录?地?址· //查é找?文?件t

intptr_t iFind = _findfirst(\, &fileinfo); if (iFind == -1) { }

_findnext(iFind, &fileinfo);//经-过y前°面?两?次?查é找?才?能?真?正y进?入?文?件t夹D

cerr << \ << endl; exit(-1); _finddata_t fileinfo;

memset(&fileinfo, 0x0, sizeof(fileinfo));

//改?变?当獭?前°工¤作痢?目?录? if (_chdir(strWildcard.c_str()) != 0) { }

cerr << \; exit(-1);

//路·径?的?标括?准?化ˉ格?式?

if (strWildcard.at(strWildcard.length() - 1) != '\\\\') { }

strWildcard += '\\\\';

//判D定¨文?件t或?文?件t夹D是?否?存?在ú if (_access(strWildcard.c_str(), 06) == -1) { }

cerr << \ << endl; exit(-1);

strWildcard = lpszFileName;//当獭?前°工¤作痢?路·径?

查é找?

if ((_stat(strFilePath.c_str(), &fileStat) == 0) && (fileStat.st_mode &

_S_IFDIR))//_S_IFDIR 是?一?个?标括?志?位?,?如?果?是?目?录?的?话°,?该?位?就í会á被?系μ统?设Θ?置? { //递蘗归é查é找?文?件t

cout << \ << strFilePath << endl; Find(strFilePath);//进?入?子哩?目?录?查é找? strWildcard=oldPath;//回?归é父?级?目?录?

}else{

if (EndWith(strFilePath,\))//是?否?是?txt文?件t

cout << \ << strFilePath << endl; continue;

}

// 判D断?找?到?文?件t的?是?否?包悒?含?\或?\ // string str=fileinfo.name; // string str1 = \

// string str2 = \

// string::size_type idx1 = str.find( str1 ); // string::size_type idx2 = str.find( str2 );

// if ( idx2 != string::npos /*&&idx2 != string::npos*/) { // continue;

// }else if ( idx1 != string::npos /*&&idx2 != string::npos*/) // string strFileName = strWildcard+fileinfo.name; // cout << \

// } // else{ // //找?到?文?件t的?路·径?

// string strFilePath = strWildcard+fileinfo.name; // string old=strWildcard; // //递蘗归é查é找?文?件t // Find(strFilePath); // strWildcard=old; // }

}

//结á束?查é找? _findclose(iFind);

}

int main() { string dir;

cout << \;

cin >> dir;

{ }

return 0;

Find(dir);//搜?索÷输?入?路·径?下?面?的?所ù有瓺文?件t夹D(辍?包悒?括ぁ?子哩?目?录?)?,?并¢查é找?特?定¨格?式?的?文?件t

if (_chdir(dir.c_str()) != 0) { }

cerr << \; exit(-1);

if (dir.at(dir.length() - 1) != '\\\\') { }

dir += '\\\\';

if (_access(dir.c_str(), 06) == -1) { }

cerr << \ << endl; exit(-1);

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

一段代码演示C++根据路径判定是目录还是文件,文件搜索,文件夹遍历等问题 如何根据路径确定其对应的是一个文件目录还是单纯的文件?如果用Java,这个问题很容易解决,直接调用现成的封装好的判定函数就可以了,但是C++却没有。怎么办?刚开始想通过判定路径里面是否含有“.”号来确定其实目录还是文件,但后来发现此路不通。为什么?问题就出在Windows下面文件夹的命名规则当中--Windows文件夹命名规则没有限定其不可以使用“.”号。比如,你完全可以将一个文件夹命名为“文件夹.文件夹”。这时候如果单纯的根据“.”号去判定,那结果可定时大错特错,你的程序将很容易的认为这个地址里面住的就是一个“文件”!再严重点,你讲一个文件夹命名为“文件夹.txt”(这事完全可以的),如果按上面方法,结果很有可能是你将一个文件夹认为是一个txt文本文档。所以根据“.”号来解决这个问

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com