Visual c++ 在目录中列出文件 我在C++中创建了一个Windows窗体,在单击按钮时,打开文件夹选择对话框。

Visual c++ 在目录中列出文件 我在C++中创建了一个Windows窗体,在单击按钮时,打开文件夹选择对话框。,visual-c++,Visual C++,现在我想做的是获取该目录中的文件列表,以便我可以逐个处理它们 我用谷歌搜索了很多方法,找到了很多方法,包括外部库(比如boost和diren.h)。我不想使用外部资源,而是我可以支配的,默认的资源 我已经读过FindFirstFile和FindNextFile的相关内容,但无法将它们结合起来 你能帮忙吗 非常感谢, 伊丹 以下是更新的代码: HANDLE hFind; WIN32_FIND_DATA FindFileData; FolderBrowserDialog^ folderBrowser

现在我想做的是获取该目录中的文件列表,以便我可以逐个处理它们

我用谷歌搜索了很多方法,找到了很多方法,包括外部库(比如boost和diren.h)。我不想使用外部资源,而是我可以支配的,默认的资源

我已经读过FindFirstFile和FindNextFile的相关内容,但无法将它们结合起来

你能帮忙吗

非常感谢, 伊丹

以下是更新的代码:

HANDLE hFind;
WIN32_FIND_DATA FindFileData;
FolderBrowserDialog^ folderBrowserDialog1 = gcnew FolderBrowserDialog;

if (folderBrowserDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
{
        String ^ selected = folderBrowserDialog1->SelectedPath;

        selected += "\\*";

        char* stringPointer = (char*) Marshal::StringToHGlobalAnsi(selected).ToPointer();

        hFind = FindFirstFile((LPCWSTR)stringPointer, &FindFileData);
        while(hFind != INVALID_HANDLE_VALUE)
        {
            printf("Found file: %s\r\n", FindFileData.cFileName);
            if(FindNextFile(hFind, &FindFileData) == FALSE)
                break;
        }
}

显然,您是为UNICODE(宽字符)编译的,因为您需要为FindFirstFile的lpFileName参数强制转换newStr。但由于传递了ANSI字符串,因此可能不会得到有用的结果。你没有写下你期望找到的东西

在FindFirstFile之前的代码中,手动将SelectedPath值转换为ANSI字符。当您需要一个宽的字符字符串时,这是没有意义的。从使用StringToHGlobalUni方法选择的字符串中获取LPCWSTR。这看起来像这样(未测试):

一般来说:不要使用强制转换,除非您需要调整设计糟糕的界面。只有当你确切知道自己在做什么时才使用它


此外,不检查FindFirstFile的hFind结果。如果您将指针传递到错误的字符串格式,则\u HANDLE \u值无效。

您对FindFirstFile做了哪些尝试,您期望得到什么,哪些无效?我添加了代码。基本上,我希望将文件名提取到char*中,以便稍后使用。好吧,我理解了您编写的部分内容,同时我发现了一种新方法-请查看更新的代码。现在,我想(使用对话框)在“selected”变量中选择一个目录。然后,我想迭代该目录中的文件。我希望每个文件名都有一个char*,这样我就可以保存它们,以后再使用它们。再次感谢!你期望什么,什么不起作用?你找到了吗无效的\u句柄\u值?您是否找到了预期的文件名?是的,我得到了hFind=INVALID\u HANDLE\u值,因此文件名无效。。。
LPCWSTR stringPointer = Marshal::StringToHGlobalAnsi(selected).ToPointer(); 

hFind = FindFirstFile(stringPointer, &FindFileData);