我尝试使用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;
}
答案 0 :(得分:2)
打开文件进行写入,然后尝试阅读,是一个主要问题。
此外,T的东西是不好的,但在这个具体的例子中可能不会伤害你。
但摆脱它,打开文件阅读。
简单错误:缓冲区长度计算。你有一个任意的字符串长度。使用std::end(buff) - std::begin(buff)
获取缓冲区长度。或者正确的sizeof
表达。
此外,通过API函数读入缓冲区不会使其终止。您需要保留报告的读取字节数,并以某种方式使用它。例如。创建std::string
。
答案 1 :(得分:0)
GENERIC_WRITE
模式打开文件但无法读取它。如果您想要读写,请将其更改为GENERIC_READ | GENERIC_WRITE
。如果您只想阅读,请更改为GENERIC_READ
。
此外,表达式strlen(buff)
不会给出缓冲区的大小。改为
sizeof(buff) / sizeof(buff[0])
。