我正在使用while!eof循环从.txt文件中读取一个wstring:
std::wifstream fileStream(path);
std::wstring input;
while (fileStream.eof() == false) {
getline(fileStream, input);
text += input + L'\n';
}
但是当我在wcout中打印它时,一些角色会变成其他角色。到目前为止,č已经转向e(在顶部有一个向后的逗号),to到i(在顶部有一个向后的逗号)和š到一个错误字符。首先我怀疑是一些格式问题。但是当我将字符串写入新的.txt文件时,它完全没问题。
此外,我正在使用_setmode(_fileno(stdout), _O_U8TEXT);
让wcout工作。
答案 0 :(得分:0)
通过将文件读取为二进制文件然后使用win32 api中的MultiByteToWideChar函数转换为wstring来解决:
std::ifstream fileStream(path, std::ios::binary | std::ios::ate);
auto size = fileStream.tellg();
fileStream.seekg(0, std::ios::beg);
LPCCH memory = new CCHAR[size];
fileStream.read((char*)memory, size);
text.resize(size);
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, memory, size, (LPWSTR)text.c_str(), text.length());
delete[] memory;
答案 1 :(得分:-1)
我不知道这是否是你问题的原因,但......
如果你写
# Clone the repo
RUN rm -rd /var/www/html
ENTRYPOINT git clone ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/Laravel /var/www/html
# Set file permissions
ENTRYPOINT chmod -R 777 /var/www/html/storage
ENTRYPOINT chmod -R 777 /var/www/html/bootstrap/cache
您在最后一行读了两遍,因为 while (fileStream.eof() == false) {
getline(fileStream, input);
text += input + L'\n';
}
是filestream.eof()
,直到您尝试读取最后一行。
我建议你这样的事情
false
p.s:抱歉我的英语不好