VC++中目录操作
在 VC++ 中利用 Windows SDK 操控目录。
程序中需要用到之前一篇文章中定义的字符串转换函数,具体函数见《wstring 与 string 的转换》
获取当前目录:GetCurrentDirectory()
函数
std::string getCurrentDirectory( void )
{
WCHAR Buffer[BUFSIZE];
DWORD dwRet;
dwRet = GetCurrentDirectory(BUFSIZE, Buffer);
if( dwRet == 0 )
{
printf("GetCurrentDirectory failed (%d)\n", GetLastError());
return string();
}
if(dwRet > BUFSIZE)
{
printf("Buffer too small; need %d characters\n", dwRet);
return string();
}
wstring wstr(Buffer);
return wstring2string(wstr);
}
获取目录下的文件信息
FindFirstFile()
、FindNextFile()
等函数读取文件信息。
遍历目录下的所有文件和子目录
FindFirstFile()
、FindNextFile()
两个函数结合实现。
int listFilesInDirectory( const std::string & fileDir, const std::string & filter, std::vector<std::string> & fileList )
{
WIN32_FIND_DATA ffd;
HANDLE hFind = INVALID_HANDLE_VALUE;
DWORD dwError=0;
fileList.clear();
wstring wcdir = string2wstring(fileDir + "\\" + filter);
hFind = FindFirstFile(wcdir.c_str(), &ffd);
if (INVALID_HANDLE_VALUE == hFind)
{
_tprintf(TEXT("FindFirstFile\n"));
return dwError;
}
// List all the files in the directory with some info about them.
do
{
if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
// dir
}
else
{
// file
string strFileName = wchar2string(ffd.cFileName);
fileList.push_back(strFileName);
}
}
while (FindNextFile(hFind, &ffd) != 0);
dwError = GetLastError();
if (dwError != ERROR_NO_MORE_FILES)
{
_tprintf(TEXT("FindFirstFile\n"));
}
FindClose(hFind);
return dwError;
}