Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 当;包含无效字符的文件:<>;。txt";是否传递给MFC CFile类?_Windows_Winapi_Visual C++_Windows 7_Mfc - Fatal编程技术网

Windows 当;包含无效字符的文件:<>;。txt";是否传递给MFC CFile类?

Windows 当;包含无效字符的文件:<>;。txt";是否传递给MFC CFile类?,windows,winapi,visual-c++,windows-7,mfc,Windows,Winapi,Visual C++,Windows 7,Mfc,注意:需要编辑标题和问题,因为最初我认为问题出在::CreateFile[W]-但事实证明,只有在使用MFC的Cfile类时,错误才会发生在XP上 当我将带有无效字符的文件名文件传递给此函数以请求创建文件时,CFile::Open(…)(在Win7/64位上)的行为让我有点困惑 在我的Windows XP设备上,呼叫失败 在我的Win7/64框中,调用成功,创建了一个名为file\u的文件,其中\u无效\u字符 发生了什么事?我猜它正在创造一个新的环境。不过,它在XP上失败似乎很奇怪。文档中说,

注意:需要编辑标题和问题,因为最初我认为问题出在
::CreateFile[W]
-但事实证明,只有在使用MFC的Cfile类时,错误才会发生在XP上

当我将带有无效字符的文件名
文件传递给此函数以请求创建文件时,
CFile::Open(…)
(在Win7/64位上)的行为让我有点困惑

在我的Windows XP设备上,呼叫失败

在我的Win7/64框中,调用成功,创建了一个名为
file\u的文件,其中\u无效\u字符


发生了什么事?

我猜它正在创造一个新的环境。不过,它在XP上失败似乎很奇怪。文档中说,文件名的合法字符对于流名也是合法的,尽管我想这并不一定意味着相反的情况是正确的。可能Windows 7支持流名称中的<和>,而Windows XP不支持。

结果表明,这是由于shlwapi.dll中的错误修复(?)-

MFC的
CFile
类对文件名进行一些内部处理,并碰巧调用

此函数驻留在Shlwapi.dll中,Win7附带了比Windows XP更新的版本

Windows XP中的版本显然无法正确处理包含以冒号分隔的流名称的文件路径

例如:

  • 在XP
    PathStripToRoot上(L“C:\\temp\\file.txt:stream)
    生成字符串
    C:\temp\file.txt:
    ,该字符串不正确,并导致从
    CFile::Open返回错误
  • 在Win7上,相同的调用产生实际的根
    C:\

是的,问题与广告有关。但事实证明,这只是MFC Cfile的问题,而不是CreateFileW的问题。