在WriteConsoleOutputCharacter C++; 我试图使用CordEndoSoEutoPutter字符直接将字符串写入C++中的控制台缓冲区。我读取了包含多个字符的文件的内容,但当我写入控制台缓冲区时,它不会将文件的其余

在WriteConsoleOutputCharacter C++; 我试图使用CordEndoSoEutoPutter字符直接将字符串写入C++中的控制台缓冲区。我读取了包含多个字符的文件的内容,但当我写入控制台缓冲区时,它不会将文件的其余,c++,windows-console,C++,Windows Console,在WriteConsoleOutputCharacter C++; 我试图使用CordEndoSoEutoPutter字符直接将字符串写入C++中的控制台缓冲区。我读取了包含多个字符的文件的内容,但当我写入控制台缓冲区时,它不会将文件的其余部分写入下一行,而是写入??。记事本上写着我的文件编码是utf-8。我想知道这是否与此有关,但当我使用cout打印文件内容时,它遇到的行会在哪里断开\n std::ifstream file("debug.txt"); static HA

在WriteConsoleOutputCharacter C++;

我试图使用CordEndoSoEutoPutter字符直接将字符串写入C++中的控制台缓冲区。我读取了包含多个字符的文件的内容,但当我写入控制台缓冲区时,它不会将文件的其余部分写入下一行,而是写入??。记事本上写着我的文件编码是utf-8。我想知道这是否与此有关,但当我使用cout打印文件内容时,它遇到的行会在哪里断开\n

std::ifstream file("debug.txt");
   static HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
   DWORD ir = 0;
   if (file.is_open()) {
       file.seekg(0, file.end);
       int len = file.tellg();
       std::cout << len;
       file.seekg(0, file.beg);
       char* string = (char*)calloc(len+1, sizeof(char));
       string[len] = '\0';
       file.read(string, len);
       file.close();
       COORD coord = { 0, 0 };
       WriteConsoleOutputCharacterA(
           console,
           string,
           len,
           coord,
           &ir
       );

       free(string);
std::ifstream文件(“debug.txt”);
静态句柄控制台=GetStdHandle(标准输出句柄);
DWORD ir=0;
if(file.is_open()){
seekg(0,file.end);
int len=file.tellg();

std::cout我真的没有看到std::vector的必要性。我在这个例子中不需要它。我也尝试了你的建议,它没有用。关于
WriteConsoleOutputCharacterA()
,我没有经验,但是:
int len=file.tellg();
给出了以字节为单位的文件长度。如果你
file.read(string,len);
在Windows上,文件读取会将Windows的行尾(
\r\n
)转换为C行尾(
\n
)。因此,您可能会收到比
字符串中
len
更少的字节(其余的请猜一下。)我不确定
std::ios::gcount()
返回从文件中读取的字节数或存储的字节数。但是,如果以二进制方式打开文件(即
std::ifstream文件(“debug.txt”,std::ios::binary);
)然后就不会发生转换了。我意识到这就是问题所在。它还导致了其他一些问题,所以我只是一个字符一个字符地扫描文件,直到到达文件的末尾。我使用while(!file.eof())流更好地
for(char c;file>>c;){/*process c*/}
for(char c;file.get(c);){/*process c*/}
;-)我真的没有看到std::vector的必要性。在这个例子中我不需要它。我也尝试了你的建议,但没有效果。关于
writeconsoleooutputcharactera()
,我没有经验,但是:
int len=file.tellg();
给出了以字节为单位的文件长度。如果你
file.read(string,len);
在Windows上,文件读取会将Windows的行尾(
\r\n
)转换为C行尾(
\n
)。因此,您可能会收到比
字符串中
len
更少的字节(其余的请猜一下。)我不确定
std::ios::gcount()
返回从文件中读取的字节数或存储的字节数。但是,如果以二进制方式打开文件(即
std::ifstream文件(“debug.txt”,std::ios::binary);
)然后就不会发生转换了。我意识到这就是问题所在。它还导致了其他一些问题,所以我只是一个字符一个字符地扫描文件,直到到达文件的末尾。我使用while(!file.eof())流更好地
for(char c;file>>c;){/*process c*/}
for(char c;file.get(c);){/*进程c*/}
;-)