字符串输出到文件
String Output to File
所以我试图写一个大字符串到。txt文件,但我有一些麻烦。我想输出的字符串是这样的:
0. x.y.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.1.x.y.t.x.y.t.x.y.t.2.x.y.t.s.x.y.t.s.x.y.t.s.x.y.t.s.3.x.y.t.x.y.t.4.n.name.t.f.m.i.x.y.t.x.y.t.x.y.t.x.y.t.n.name.t.f.m.i.x.y.t.x.y.t.x.y.t.x.y.t.x.y.t.x.y.t.n.name.t.f.m.i.x.y.t.x.y.t.x.y.t.x.y.t.n.name.t.f.m.i.x.y.t.x.y.t.x.y.t.5。
(这是一种数据保存格式,不值得深入研究)。
为了测试这个,我首先写了这个(其中chunk
是上面的字符串,在函数之外创建,我想输出):
void WriteToFile(std::string chunk)
{
cout << "Writing...n";
ofstream SaveGame;
SaveGame.open("SaveGame.txt");
std::string MainString = "0.x.y.t.f.t.f.t.f.t.f.";
cout << MainString;
SaveGame << MainString;
cout << "Done!n";
}
这个测试代码运行良好,并且我的输出文件包含0.x.y.t.f.t.f.t.f.t.f.
但是当我尝试这个时:
void WriteToFile(std::string chunk)
{
cout << "Writing...n";
ofstream SaveGame;
SaveGame.open("SaveGame.txt");
std::string MainString = chunk;
cout << MainString;
SaveGame << MainString;
cout << "Done!n";
}
我得到胡言乱语:
不用说,这不是我想要的。⸰⸱⸲⸳⸴⹎慮敭琮昮洮䤮砮礮琮砮礮琮砮礮琮砮礮琮丮渮浡⹉⹎慮敭琮昮洮䤮砮礮琮砮礮琮砮礮琮砮礮琮丮渮浡⹉⸵
这是程序的完整代码;注意,无论我使用WriteToFile(Chunk)还是WriteToFile(Total),它都会失败。如果我将MainString初始化为WriteToFile中的整个字符串,代码也会失败。
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
void ReadFile();
void WriteToFile(std::string chunk);
int main()
{
///CHUNK SAVE FORMAT
std::string Chunk = "0.";
Chunk += "x.y.";
Chunk += "t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.";
Chunk += "t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.";
Chunk += "t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.";
Chunk += "t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.";
Chunk += "t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.";
Chunk += "t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.";
Chunk += "t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.";
Chunk += "t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.";
Chunk += "1.";
Chunk += "x.y.t.";
Chunk += "x.y.t.";
Chunk += "x.y.t.";
Chunk += "2.";
Chunk += "x.y.t.s.";
Chunk += "x.y.t.s.";
Chunk += "x.y.t.s.";
Chunk += "x.y.t.s.";
Chunk += "3.";
Chunk += "x.y.t.";
Chunk += "x.y.t.";
Chunk += "4.";
Chunk += "N.name.t.f.m.I.x.y.t.x.y.t.x.y.t.x.y.t.";
Chunk += "N.name.t.f.m.I.x.y.t.x.y.t.x.y.t.x.y.t.x.y.t.x.y.t.";
Chunk += "N.name.t.f.m.I.x.y.t.x.y.t.x.y.t.x.y.t.";
Chunk += "N.name.t.f.m.I.x.y.t.x.y.t.x.y.t.";
Chunk += "5.";
std::string Total = "0.x.y.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.t.f.1.x.y.t.x.y.t.x.y.t.2.x.y.t.s.x.y.t.s.x.y.t.s.x.y.t.s.3.x.y.t.x.y.t.4.N.name.t.f.m.I.x.y.t.x.y.t.x.y.t.x.y.t.N.name.t.f.m.I.x.y.t.x.y.t.x.y.t.x.y.t.x.y.t.x.y.t.N.name.t.f.m.I.x.y.t.x.y.t.x.y.t.x.y.t.N.name.t.f.m.I.x.y.t.x.y.t.x.y.t.5.";
WriteToFile(Total);
return 0;
}
void ReadFile()
{
}
void WriteToFile(std::string chunk)
{
cout << "Writing...n";
ofstream SaveGame;
SaveGame.open("SaveGame.txt");
std::string MainString = chunk;
cout << MainString;
SaveGame << MainString;
cout << "Done!n";
}
这是怎么回事?
即使没有尝试过,我也可以自信地说它对我有效。错误不在代码中,而是在其他地方:
我怀疑你是在Windows的记事本或类似的程序中打开文本文件的。应用程序将尝试猜测文件的编码,并(错误地)猜测它是unicode编码的文件(UTF-16)。
要解决这个问题,请在打开文件时指定编码(如果Notepad不支持此编码,请使用适当的文本编辑器,例如notepad++)。
'gibberish'是正确的数据,但被解释为16位unicode字符。请看方格中的十六进制小数字:
是0x2E和0x30('。'和'0')
我猜你写的文件是正确的,但不知怎的,检查你写的数据的方式是错误的。
您是否碰巧使用记事本打开文件?如果是这样,如果没有BOM, notepad将使用一些启发式方法(IsTextUnicode)来猜测文件内容的编码。在你的情况下,特定的内容使它认为它实际上是Unicode…
你的代码工作正常。是记事本坏了。阅读更多关于记事本编码问题的信息。
您提供的代码在使用g++ (Ubuntu/Linaro 4.5.2-8ubuntu4)编译时可以正常工作诊断问题需要有关环境的信息。
澄清一下,当您查看文件时,错误的代码是否会向终端回显乱码?
我怀疑你的函数实际上是生成你想要的位,但他们碰巧欺骗一些东西认为文件是unicode而不是ascii。
似乎编码有一些问题。尝试在编辑器中打开文件而不是记事本(wordpad或notepad++),您也将在读取相同的文件时获得正确的结果。
- 如何在 的开头<x>和结尾<y>之间更改带有文件输出的字符串的值
- C++对象数组的文件输出
- bcdedit 文件输出不起作用,但其他命令可以
- 如何从文本文件输出数据?(学生成绩单计划)
- 使用 C++文件 I/O 输出 pdf 文件
- C 文件输出垃圾
- 从堆栈中读取字符后,如何修复不正确的文件输出
- C++:具有随机名称的文件输出
- 在命令提示符下看到换行符,但在文件输出中可以看到 相同的字符串
- 生成文件不会生成预期的文件输出
- C++11 fgetc 在"r+b"模式下使用时向我的文件输出 0
- 使用函数从文件输出
- GCC.obj文件输出不具有确定性(.debug_info,PROGPITS部分)
- C cstdiofile :: Writestring给出了不正确的文件输出
- C 输出:STD :: COUT和文件输出没有相同的内容
- GCC和MSVC之间的文件输出不一致
- C++文件输出奇怪的数字,并且部分代码没有运行
- 如何将特定字符从TXT文件输出到特定点
- C 调用从TXT文件输出信息的函数
- 将交易从文本文件输出到屏幕