优化使用 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 失败的主要内容,如果未能解决你的问题,请参考以下文章