【发布时间】:2021-04-12 17:22:39
【问题描述】:
我有一个包含大约 9 个文件的文件夹,当按下按钮时,我试图让我的代码显示文件夹中每个文件的消息框以及文件名。出于某种原因,它只显示文件夹中最后一个文件的消息框,然后给我错误:“查找文件时出错。”它来自我创建的错误处理程序 if (fileError != ERROR_NO_MORE_FILES)。我不确定为什么它不显示所有文件名并给我一个错误。我的代码的相关部分如下:
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <stdio.h>
TCHAR file_buff[200];
TCHAR file_buff2[200];
TCHAR file_buff3[200];
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
DWORD fileError_initial = 0;
DWORD fileError = 0;
按下应该给我所有消息框的按钮:
case IDC_BUTTON_RUN:
hFind = FindFirstFile(L"C:\\Users\\sallen\\Desktop\\Folder1\\*", &FindFileData);
fileError_initial = GetLastError();
if (hFind == INVALID_HANDLE_VALUE)
{
wsprintfW(file_buff, L"No files were found.\n Error: %s.", fileError_initial);
MessageBox(NULL, file_buff, L"File Search Error", 0);
return fileError_initial;
}
else
{
while (FindNextFile(hFind, &FindFileData) != 0);
{
wsprintf(file_buff2, L"The first file found is %s.\n", FindFileData.cFileName);
MessageBox(hWnd, file_buff2, L"File Name", 0);
}
fileError = GetLastError();
if (fileError != ERROR_NO_MORE_FILES)
{
wsprintfW(file_buff3, L"Error finding files. %s", fileError);
MessageBox(hWnd, file_buff3, L"File Search Error", 0);
}
}
FindClose(hFind);
return fileError;
break;
【问题讨论】:
-
1.
else有什么意义? 2.FindFirstFile返回第一个文件。你忽略它。 3. MS Docs 网站上有一个例子。 -
首先,您不会看到有关您找到的第一个文件的消息框,因为您在打印有关第一个文件的信息之前调用了
FindNextFile。其次,你怎么知道你只看到目录中的最后一个文件?FindFIrstFIle/FindNextFIle不一定按字母顺序返回文件。 -
我希望它循环遍历所有文件,直到不再循环遍历。因为我在做“while (FindNextFile(hFind, &FindFileData) != 0);”,所以 while 循环不会这样做吗?当我在调用 FindFirstFile 后打印出文件名时,它给了我“。”我查看了 MS Docs 网站上的示例。
-
我按照docs.microsoft.com/en-us/windows/win32/fileio/… 的示例做了,但由于某种原因它对我不起作用
-
我已将其更新为使用 do-while 循环,这可以正常工作并按顺序获取所有文件,但它也会找到文件“。”和“..”在文件夹中的实际文件之前。当我没有任何名称为“。”的文件时,为什么会这样做?和“..”?
标签: c++ file winapi find messagebox