我正在做一些文件io并在下面创建了测试,但我认为testoutput2.txt在运行后会与testinputdata.txt相同吗?
testinputdata.txt:
some plain
text
data with
a number
42.0
testoutput2.txt(在某些编辑器中,它在单独的行上,但在其他编辑器中,它们全部在一行上)
some plain
ऀ琀攀砀琀ഀഀ
data with
愀 渀甀洀戀攀爀ഀഀ
42.0
int main()
{
//Read plain text data
std::ifstream filein("testinputdata.txt");
filein.seekg(0,std::ios::end);
std::streampos length = filein.tellg();
filein.seekg(0,std::ios::beg);
std::vector<char> datain(length);
filein.read(&datain[0], length);
filein.close();
//Write data
std::ofstream fileoutBinary("testoutput.dat");
fileoutBinary.write(&datain[0], datain.size());
fileoutBinary.close();
//Read file
std::ifstream filein2("testoutput.dat");
std::vector<char> datain2;
filein2.seekg(0,std::ios::end);
length = filein2.tellg();
filein2.seekg(0,std::ios::beg);
datain2.resize(length);
filein2.read(&datain2[0], datain2.size());
filein2.close();
//Write data
std::ofstream fileout("testoutput2.txt");
fileout.write(&datain2[0], datain2.size());
fileout.close();
}
答案 0 :(得分:0)
您无法将Unicode文本读入std::vector<char>
。 char
数据类型仅适用于窄字符串,我的猜测是您正在读取的文本文件(testinputdata.txt
)使用UTF-8或UTF-16编码保存。
请尝试使用wchar_t
类型代替字符。它专门设计用于“宽”(或Unicode)字符。
答案 1 :(得分:0)
你要确认你的输入是否成功!虽然这会让你感到厌烦,但你还应注意文件中的字节数与正在读取的字符数没有直接关系:字符数可能少于字节数(想想使用UTF8编码的多个字节的Unicode字符)反之亦然(尽管后者不会出现任何Unicode编码)。您所经历的只是read()
无法读取您要求阅读的字符数,但write()
乐意写下您给它的垃圾。
答案 2 :(得分:0)
它的工作正常,我在VC ++ 6.0上运行你的程序并检查记事本和MS Word的输出。你能指出你面临问题的编辑名称吗?