win32 api阅读文件

时间:2014-11-16 11:11:07

标签: c++ winapi

我尝试使用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;
}

2 个答案:

答案 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])