【问题标题】:Refined use of MFC FindFile API failing优化使用 MFC FindFile API 失败
【发布时间】: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(实际上)是一个全局变量。

标签: c++ file winapi visual-c++ mfc


【解决方案1】:

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

"data\*.HMD"

使用

"data\\*.HMD"

【讨论】:

  • 啊!工作!已经忘记了。
猜你喜欢
  • 2015-03-03
  • 2023-03-05
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 2011-07-30
相关资源
最近更新 更多