閱讀我試圖使用dirent.h提供的功能如何跳過一個目錄,而使用dirent.h
我的問題是遞歸打開文件: 我無法把它跳過它未能目錄打開。我希望它打開它可以找到的目錄並跳過它不能的目錄,然後移到下一個目錄,而不是以失敗退出。 我該怎麼做才能解決這個問題?
下面是一個簡單的代碼我試圖用
int acessdirs(const char *path)
{
struct dirent *entry;
DIR *dp;
char fpath[300];
if(dp=opendir(path))
{
while((entry=readdir(dp)))
do things here
}
else
{
std::cout<<"error opening directory";
return 0;
}
return 1;
}
我用這同一風格上windows 7
和它的作品fine.But它墜毀,機上windows xp
,當我調試它,我發現它在試圖崩潰打開"system volume information"
。 我真的不需要訪問此文件夾,我希望如果有任何方法可以跳過它。
這是我真正的代碼:
這是一個有點長。
int listdir(const char *path)
{
struct dirent *entry;
DIR *dp;
if(dp = opendir(path))
{
struct stat buf ;
while((entry = readdir(dp)))
{
std::string p(path);
p += "\\";
p += entry->d_name;
char fpath[300];
if(!stat(p.c_str(), &buf))
{
if(S_ISREG(buf.st_mode))
{
sprintf(fpath,"%s\\%s",path,entry->d_name);
stat(fpath, &buf);
std::cout<<"\n Size of \t"<<fpath<<"\t"<<buf.st_size;
fmd5=MDFile (fpath);
}//inner second if
if(S_ISDIR(buf.st_mode) &&
// the following is to ensure we do not dive into directories "." and ".."
strcmp(entry->d_name, ".") && strcmp(entry->d_name, ".."))
{
listdir(p.c_str());
}
}//inner first if
else
std::cout << "ERROR in stat\n";
}//end while
closedir(dp);
}//first if
else
{
std::cout << "ERROR in opendir\n";
return 0;
}
return 1;
}//listdir()
'access'拼寫有兩個'c'。 – hochl
這段代碼如何編譯?你有一個名爲「dip」的變量,你把它稱爲「dp」。另外,在將來,請縮進您的代碼,以使其易於理解。 – Celada
你粘貼的代碼太少,我們甚至不知道問題出在哪裏。在一個循環中調用'accessdirs'?當返回「0」時,該循環做什麼?遞歸究竟在哪裏? 「在這裏做事情」是否稱爲「訪問者」? –