在你提到它之前,我不能使用 Boost 文件系统。:C
所以,我目前正在搞乱一个程序,该程序将文件扔到由密码生成的目录中。密码中的每个字符代表一个文件夹。我现在想创建一个从密码目录中检索文件并销毁整个目录的函数,但我似乎无法使用 FindFirstFile 从目录中正确获取文件名。
WIN32_FIND_DATA data;
HANDLE hFind;
LPCWSTR LPCfilename;
string directory = "";
for(unsigned int i = 0; i<password.length(); i++)
{
directory= directory + password[password.length()-i-1]+"\\";
}
string filename = "*";
directory = directory + filename +"\0";
wstring tempd = wstring(directory.begin(), directory.end());
LPCWSTR LPCdirectory = tempd.c_str();
hFind = FindFirstFile(LPCdirectory, &data);
while(hFind == INVALID_HANDLE_VALUE)
{
FindNextFile(hFind, &data);
}
if(hFind != INVALID_HANDLE_VALUE)
LPCfilename = data.cFilename;
特别的问题似乎与我的最后一行有关:
LPCfilename = data.cFilename;
LPCfilename 正在接收的值仅转换为单个字符;这 ”。” 特点。虽然我的文件是一个名为“file”的.txt。
cFilename 似乎也包含值“。”,所以我不太确定是什么导致我没有收到正确的文件名。
这是我给出的答案给出的解决方案:
//deconstructs the labyrinth and returns file to the root folder
void ReleaseTheBeastBeyondThePortcullis(const string& password)
{
HANDLE hFind;
WIN32_FIND_DATAA data = {0};
string directory = "";
string filename = "";
for(unsigned int i = 0; i<password.length(); i++)
{
directory= directory + password[password.length()-i-1]+"\\";
}
hFind = FindFirstFileA((directory + "*").c_str(), &data);
if (hFind != INVALID_HANDLE_VALUE)
{
do
{
if ((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
{
directory = directory + data.cFileName;
filename = data.cFileName;
break;
}
}
while (FindNextFileA(hFind, &data));
FindClose(hFind);
}
wstring tempd = wstring(directory.begin(), directory.end());
LPCWSTR LPCdirectory = tempd.c_str();
wstring tempf = wstring(filename.begin(), filename.end());
LPCWSTR LPCfilename = tempf.c_str();
MoveFile(LPCdirectory, LPCfilename);
}