我正在尝试打印计算机中所有目录中的所有文件名... 我从@mayur编写的代码中获取帮助 我希望它能在我的整个计算机上运行... 因为它应该覆盖我的整个计算机,所以我希望该路径是动态的以覆盖所有驱动器.....
我正在从代码中寻求帮助... 但是在此我必须给一条路.... 我希望它能在我的整个计算机上运行... 因为它应该覆盖我的整个计算机,所以我希望该路径是动态的以覆盖所有驱动器.....
#include <windows.h>
#include <TCHAR.h>
#include <stdio.h>
void Enum(TCHAR root[0xFF])
{
HANDLE hFind;
WIN32_FIND_DATA wfd;
TCHAR GeneralPath[0xFF];
TCHAR AgainFolder[0xFF];
TCHAR FileFullPath[0xFF];
_stprintf(GeneralPath, _T("%s\\*.*"), root);
hFind = FindFirstFile(GeneralPath, &wfd);
if(INVALID_HANDLE_VALUE==hFind)
return;
do
{
if( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) //Checking Founded File Attribute is it File or Folder/Directory
{
if( !_tcscmp(wfd.cFileName, _T(".")) || !_tcscmp(wfd.cFileName, _T("..")) ) //if Founded directory is same(.) or parent(..) then ignore them
continue;
_stprintf(AgainFolder, _T("%s\\%s"), root, wfd.cFileName);
Enum(AgainFolder); //Recursion because folder is inside another folder
}
else
{
_stprintf(FileFullPath, _T("%s\\%s"), root, wfd.cFileName); // "Folder\\fileName.extension"
_tprintf(_T("%s\n"),FileFullPath);
}
}while(FindNextFile(hFind, &wfd));
CloseHandle(hFind);
hFind=INVALID_HANDLE_VALUE;
}
int main()
{
TCHAR Folder[0xFF]=_T("c:\\windows");
Enum(Folder);
return 0;
}
我尝试过使用for循环...
while(1)
{
string s="abcdefghijklmnopqrstuvwxyz";
for(int i=0;i<26;i++)
{
string t=s[i]+":\\test";
TCHAR Folder[0xFF]=_T(t);
Enum(Folder);
Sleep(1000);
}
}
但这给了我错误。 错误是:: error:必须使用大括号括起来的初始化程序来初始化数组 TCHAR文件夹[0xFF] = _ T(t); 我请您调查一下
结果:仅打印给定路径的结果 预期:我正在尝试打印计算机中所有目录中的所有文件名
答案 0 :(得分:1)
您的错误是_T
宏仅应用于字符串和字符文字。这不是将任何内容都转换为TCHAR字符串的通用方法,因此_T(t)
(其中t
是string
的地方不起作用。
执行上面代码中要尝试做的一种简单方法是
string s = "abcdefghijklmnopqrstuvwxyz";
basic_string<TCHAR> folder(_T("X:\\test"));
for (int i = 0; i < 26; ++i) {
folder[0] = s[i];
Enum(folder.c_str());
}
只需创建正确格式的字符串,并在每次循环时替换驱动器号即可。