VC 遍历指定目录下的文件
2008-08-02 22:14
351 查看
//转自:http://www.vcgood.com/forum_posts.asp?TID=2261&PN=1
//用于输出指定目录下的所有文件的文件名,包括子目录。
版本1:用string处理,方便,容易理解.
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
bool IsRoot(string Path)
{
string Root;
Root=Path.at(0)+"://";
if(Root==Path)
return true;
else
return false;
}
void FindInAll(string Path)
{
string szFind;
szFind=Path;
if(!IsRoot(szFind))
szFind+="//";
szFind+="*.*";
WIN32_FIND_DATA FindFileData;
HANDLE hFind=FindFirstFile(szFind.c_str(),& FindFileData);
if(hFind==INVALID_HANDLE_VALUE)
return ;
do
{
if(FindFileData.cFileName[0]=='.') //过滤本级目录和父目录
continue;
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //如果找到的是目录,则进入此目录进行递归
{
string szFile;
if(IsRoot(Path))
szFile=Path+FindFileData.cFileName;
else
szFile=Path+"//"+FindFileData.cFileName;
FindInAll(szFile);
}
else //找到的是文件
{
string szFile;
if(IsRoot(Path))
szFile=Path+FindFileData.cFileName;
else
szFile=Path+"//"+FindFileData.cFileName;
cout<<szFile<<endl;
cout<<FindFileData.cFileName<<endl;
}
}
while(FindNextFile(hFind,& FindFileData));
FindClose(hFind);
}
int main()
{
FindInAll("D://C++");
return 0;
}
版本2:编译器的通用性更强
#include <windows.h>
#include <iostream>
using namespace std;
BOOL IsRoot(LPCTSTR lpszPath)
{
TCHAR szRoot[4];
wsprintf(szRoot,"%c://",lpszPath[0]);
return (lstrcmp(szRoot,lpszPath)==0);
}
void FindInAll(::LPCTSTR lpszPath)
{
TCHAR szFind[MAX_PATH];
lstrcpy(szFind,lpszPath); //windows API 用lstrcpy,不是strcpy
if(!IsRoot(szFind))
lstrcat(szFind,"//");
lstrcat(szFind,"*.*"); //找所有文件
WIN32_FIND_DATA wfd;
HANDLE hFind=FindFirstFile(szFind,& wfd);
if(hFind==INVALID_HANDLE_VALUE) // 如果没有找到或查找失败
return;
do
{
if(wfd.cFileName[0]=='.')
continue; //过滤这两个目录
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
TCHAR szFile[MAX_PATH];
if(IsRoot(lpszPath))
wsprintf(szFile,"%s%s",lpszPath,wfd.cFileName);
else
wsprintf(szFile,"%s//%s",lpszPath,wfd.cFileName);
FindInAll(szFile); //如果找到的是目录,则进入此目录进行递归
}
else
{
TCHAR szFile[MAX_PATH];
if(IsRoot(lpszPath))
wsprintf(szFile,"%s%s",lpszPath,wfd.cFileName);
else
wsprintf(szFile,"%s//%s",lpszPath,wfd.cFileName);
printf("%s/n",szFile); //对文件进行操作
}
}
while(FindNextFile(hFind,&wfd));
FindClose(hFind); //关闭查找句柄
}
int main()
{
FindInAll("D://C++");
return 0;
}
//用于输出指定目录下的所有文件的文件名,包括子目录。
版本1:用string处理,方便,容易理解.
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
bool IsRoot(string Path)
{
string Root;
Root=Path.at(0)+"://";
if(Root==Path)
return true;
else
return false;
}
void FindInAll(string Path)
{
string szFind;
szFind=Path;
if(!IsRoot(szFind))
szFind+="//";
szFind+="*.*";
WIN32_FIND_DATA FindFileData;
HANDLE hFind=FindFirstFile(szFind.c_str(),& FindFileData);
if(hFind==INVALID_HANDLE_VALUE)
return ;
do
{
if(FindFileData.cFileName[0]=='.') //过滤本级目录和父目录
continue;
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //如果找到的是目录,则进入此目录进行递归
{
string szFile;
if(IsRoot(Path))
szFile=Path+FindFileData.cFileName;
else
szFile=Path+"//"+FindFileData.cFileName;
FindInAll(szFile);
}
else //找到的是文件
{
string szFile;
if(IsRoot(Path))
szFile=Path+FindFileData.cFileName;
else
szFile=Path+"//"+FindFileData.cFileName;
cout<<szFile<<endl;
cout<<FindFileData.cFileName<<endl;
}
}
while(FindNextFile(hFind,& FindFileData));
FindClose(hFind);
}
int main()
{
FindInAll("D://C++");
return 0;
}
版本2:编译器的通用性更强
#include <windows.h>
#include <iostream>
using namespace std;
BOOL IsRoot(LPCTSTR lpszPath)
{
TCHAR szRoot[4];
wsprintf(szRoot,"%c://",lpszPath[0]);
return (lstrcmp(szRoot,lpszPath)==0);
}
void FindInAll(::LPCTSTR lpszPath)
{
TCHAR szFind[MAX_PATH];
lstrcpy(szFind,lpszPath); //windows API 用lstrcpy,不是strcpy
if(!IsRoot(szFind))
lstrcat(szFind,"//");
lstrcat(szFind,"*.*"); //找所有文件
WIN32_FIND_DATA wfd;
HANDLE hFind=FindFirstFile(szFind,& wfd);
if(hFind==INVALID_HANDLE_VALUE) // 如果没有找到或查找失败
return;
do
{
if(wfd.cFileName[0]=='.')
continue; //过滤这两个目录
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
TCHAR szFile[MAX_PATH];
if(IsRoot(lpszPath))
wsprintf(szFile,"%s%s",lpszPath,wfd.cFileName);
else
wsprintf(szFile,"%s//%s",lpszPath,wfd.cFileName);
FindInAll(szFile); //如果找到的是目录,则进入此目录进行递归
}
else
{
TCHAR szFile[MAX_PATH];
if(IsRoot(lpszPath))
wsprintf(szFile,"%s%s",lpszPath,wfd.cFileName);
else
wsprintf(szFile,"%s//%s",lpszPath,wfd.cFileName);
printf("%s/n",szFile); //对文件进行操作
}
}
while(FindNextFile(hFind,&wfd));
FindClose(hFind); //关闭查找句柄
}
int main()
{
FindInAll("D://C++");
return 0;
}
相关文章推荐
- VC中遍历指定目录中的所有文件和文件夹
- VC++遍历指定目录下的所有文件
- VC 遍历指定目录下的文件
- Java遍历输出指定目录、树形结构所有文件包括子目录下的文件
- shell遍历目录下指定后缀名的文件
- 两个delphi下遍历指定目录下指定类型文件的函数
- php遍历替换目录下文件指定内容的方法
- 分享下java 读取目录及子目录下指定文件名的路径 并放到一个List数组里面返回遍历和写到文件里
- php实现遍历目录并删除指定文件中指定内容
- MFC 遍历目录下指定类型的文件并复制
- 一个遍历指定目录下所有文件的例子
- VC/MFC 下 递归遍历目录下的所有子目录及文件
- java遍历文件夹并复制文件到指定目录
- [Windowns C]递归遍历指定目录下的子目录和文件
- Linux下递归遍历指定目录下的文件内容并删除的函数实现
- 使用QDir遍历指定目录下的指定文件
- 遍历某一指定目录下的文件和目录
- Java遍历列出某一目录下的文件及文件夹,寻找某一指定文件
- javaseday23补充(遍历指定目录保存到文件 序列流 多个序列流 合并 枚举和迭代 )
- vc查找指定目录下的文件: