Win32 API 读取文件

win32 api reading file

本文关键字:文件 读取 API Win32      更新时间:2023-10-16

>我正在尝试使用 WIN32 api 读取文件,但当我尝试打印一个字符时,它完全是胡言乱语我尝试更改文件编码:unicode,ansi,utf-8,但问题仍然存在

#include <windows.h>
#include <iostream>
using namespace std;
int main(){
TCHAR buff[512];
DWORD wr,pos;
DWORD bytesWritten;
DWORD len = (DWORD)strlen(buff);

 HANDLE f = CreateFile("test.txt",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
 if(f==INVALID_HANDLE_VALUE)
 {
    cout<"error";
 }

 ReadFile(f, buff ,len,&wr, NULL);
 cout<<buff[0];


 CloseHandle(f);
 return 0;
}

打开文件进行写入,然后尝试读取是一个主要问题。

此外,T的东西不好,但在这个具体的例子中可能不会伤害你。

但是摆脱它,然后打开文件进行阅读。

简单的错误:缓冲区长度计算。您有一个任意的字符串长度。使用std::end(buff) - std::begin(buff)获取缓冲区长度。或者适当的sizeof表达。

此外,通过 API 函数读取缓冲区不会使其终止零。您需要保留报告的读取字节数,并以某种方式使用它。例如,创建一个std::string

GENERIC_WRITE模式打开文件,但无法读取它。如果要读取和写入,请将其更改为 GENERIC_READ | GENERIC_WRITE 。如果您只想阅读,请更改为 GENERIC_READ

此外,表达式strlen(buff)不会为您提供缓冲区的大小。更改为
sizeof(buff) / sizeof(buff[0]) .