C++ 使用文件映射从文件中读取数据
我想从文件(.txt)中读取数据并将其推入编辑框。 我用纯API编写C++。C++ 使用文件映射从文件中读取数据,c++,api,C++,Api,我想从文件(.txt)中读取数据并将其推入编辑框。 我用纯API编写C++。 HANDLE hFile; HANDLE hMapFile; LPVOID pMemory; 及 结果:空白,编辑框中无任何内容 我搜索了一些页面,但没有解决 当我尝试通过设置断点进行调试时,如下图所示: (很抱歉,我无法发布图像) hFile是0xFFFFFF,所以我认为错误是CreateFile,但我不明白 请帮我解决这个问题。谢谢 hFile = CreateFile((LPCWSTR)szFileName,
HANDLE hFile;
HANDLE hMapFile;
LPVOID pMemory;
及
结果:空白,编辑框中无任何内容
我搜索了一些页面,但没有解决
当我尝试通过设置断点进行调试时,如下图所示:
(很抱歉,我无法发布图像)
hFile是0xFFFFFF,所以我认为错误是CreateFile,但我不明白
请帮我解决这个问题。谢谢
hFile = CreateFile((LPCWSTR)szFileName,....
为什么要选LPCWSTR?如果你需要那个演员,你就做错了。使用调试器调查每个步骤,以了解更多错误。它在哪一行失败?CreateFile、CreateFileMapping和MapViewOfFile的结果是什么。很可能其中一个正在失败。您应该检查代码中是否有错误的返回值。您最好希望该文件有一个终止NUL char(此时我有点怀疑)。从
CreateFile
文档中:如果函数失败,返回值无效。要获取扩展的错误信息,请调用GetLastError。
@ThùyDương:您缺少很多错误处理。一旦CreateFile()
开始工作,请记住映射将在字节上运行,因此(LPCWSTR)pMemory
仅在文件内容为UTF-16编码且以null结尾时才能正常工作。而WM_SETTEXT
仅在程序为Unicode编译且hwnEdit
为Unicode窗口的情况下才能使用UTF-16文本。这需要做很多假设。这不是很好的编程实践。+1我同样怀疑这是在启用Unicode设置的情况下编译的,szFileName
是一个char
缓冲区,前面提到的cast试图纠正这个问题。此外,文件本身很可能也是窄字符,这意味着即使OP解决了这个问题,它们也会有另一个同样恼人的问题。@ScottMcP MVP:感谢您的推荐,我编辑了:wchar_t*szFileName=0;szFileName=L“abc.txt”;hFile=CreateFile(szFileName,通用|读|通用|写,文件|共享|读|文件|共享|写,0,打开|现有,文件|属性|存档,NULL);但执行此行时调试器中的hFile值仍然为:0xFFFFFF。什么错误???@ThùyDƵng:您需要调用GetLastError()
来找出失败的原因。很可能是,该文件在当前搜索路径上的任何位置都不存在(因为您正在指定.txt文件的相对路径),或者该文件已被其他文件打开,并且没有共享对该文件的访问权限。
hFile = CreateFile((LPCWSTR)szFileName,....