优化使用 MFC FindFile API 失败

Posted

技术标签:

【中文标题】优化使用 MFC FindFile API 失败【英文标题】:Refined use of MFC FindFile API failing 【发布时间】:2015-03-23 17:14:49 【问题描述】:

我使用自定义 .HMD 格式对我的 VC++ MFC 应用程序中的一些数据进行二进制编码。假设一个文件夹中有多个 HMD 文件,我想读取它们的所有文件名。

我偶然发现了CFindFile 类的 MFC。我在我的项目路径中添加了一堆我的 HMD 文件并尝试了以下代码 -

CFileFind finder;
BOOL bWorking = finder.FindFile(_T("*.HMD"));
while (bWorking)

    bWorking = finder.FindNextFile();
    TRACE(_T("%s\n"), (LPCTSTR)finder.GetFileName());

此代码有效! TRACE 打印了项目路径下的所有 HMD 文件。

但是,我尝试从随机目录中执行相同操作。我只是在项目路径中创建了一个data 目录并将我所有的HMD文件移到那里,然后再次尝试了代码,如下所示。

CFileFind finder;
BOOL bWorking = finder.FindFile(_T("data\*.HMD")); // Only change is I added data to path
while (bWorking)

    bWorking = finder.FindNextFile();
    TRACE(_T("%s\n"), (LPCTSTR)finder.GetFileName());

但是,这个无法读取文件名。 finder.FindNextFile() 返回false

有人可以告诉我如何解决我对 CFindFile 的使用问题,以便我可以从任何随机目录中读取文件吗?

附:我正在使用多字节字符集。

【问题讨论】:

无关:尽可能使用完整路径。获取应用程序目录,然后将 "data\*.HMD" 连接到该目录。 However, this one failed. 以什么方式失败? @PaulMcKenzie 读取文件名失败。 'bWorking' 返回finder.FindNextFile() 返回false @Golazo,由于您使用的是 Visual Studio,因此您没有收到任何关于字符串包含无法识别的字符序列的警告?更具体地说,C4129? @Golazo: Global Variables are Bad 和 CWD(实际上)是一个全局变量。 【参考方案1】:

您需要转义反斜杠字符。而不是

"data\*.HMD"

使用

"data\\*.HMD"

【讨论】:

啊!工作!已经忘记了。

以上是关于优化使用 MFC FindFile API 失败的主要内容,如果未能解决你的问题,请参考以下文章

MFC 中 CFindFile 的用法

MFC 检测文件存在获取当前路径新建文件夹

比 MFC 更好的框架?

MFC combobox下拉菜单,显示文件夹或者文件目录

与使用 MFC 的常规 DLL 链接时,MFC 应用程序断言失败

MFC中DLALOG下的RADIO控件怎么达成4选一