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