C /以特定方式在TXT文件上附加数据
c++ / Append data on a txt file in a specific way
我有一个这样的txt文件:
123456
123456
abcdef
...
使用C ,我想打开它并以以下方式添加数据
123456新数据新数据
123456新数据新数据
ABCDEF新数据新数据
...
我已经在Stackoverflow上看到了这篇文章,但它在Python中。
我使用了此功能
std::ofstream file_to_save;
file_to_save.open(path, ios::out | ios::app);
,但它在文件末尾而不是每个单词旁边添加数据。
编辑:实际上我是在循环中连续添加日期,而不是一次循环。那是困难。因此,我将文件带有所有日期,然后在循环中,创建新数据。假设"新数据"然后,我想为已经存在的文件分配此新数据(始终不同)。
123456
123456
abcdef
...
我在循环中创建新数据"新数据1"。然后想像这样添加到文件
123456新数据1
123456
abcdef
...
然后在我的循环中的第2步,我创建了"新数据2"。然后想像这样添加到文件
123456新数据1
123456新数据2
abcdef
...
然后在我的循环中的步骤3,我创建"新数据3"。然后想像这样添加到文件
123456新数据1
123456新数据2
ABCDEF新数据3
...等等,直到填写整个文件。
有人可以帮我吗?
谢谢
您必须将现有文件的内容存储在数组中或向量并将其写回同一文件。
void appendToFile(string sFilename, int nInsertAt, string sDataToInsert)
{
std::ifstream infile("output.txt");
string line;
vector<string> vLines;
while (std::getline(infile, line))
{
vLines.push_back(line);
}
infile.close();
std::ofstream outfile("output.txt");
for (int i = 0; i < vLines.size(); i++)
{
char buff[1024];
if (i == nInsertAt)
{
sprintf(buff, "%s %s", vLines[i].c_str(), sDataToInsert.c_str());
outfile << buff << endl;
}
else
{
outfile << vLines[i] << endl;
}
}
outfile.close();
}
void test()
{
for (int i = 0; i < 10; i++)
{
char buff[1024];
sprintf(buff, "new data %d", i);
appendToFile("output.txt", i, buff);
}
}
读取所有文件并将字符串存储在向量中。对于向量中的每个元素,请附加您的新数据,然后将它们写入文件中,完全覆盖您的文件。
另外,您可以使用寻求功能按行读取/覆盖您的文件行
有很多方法可以做到这一点。最安全的通常是将每行复制到新文件,将您需要的任何内容附加到该行,然后继续直至输入文件结束。
然后,您只需将数据从新文件复制到旧文件,或(如果您确定没有其他链接)删除旧文件,然后将新名称重命名为旧名称。/p>
另外,您可以将旧文件复制到临时文件,然后在将数据复制回旧文件时处理数据(最后删除临时文件)。
将数据读为内存,然后用新数据覆盖文件更加脆弱 - 如果您在操作中间会崩溃或电源损失,则可能会破坏文件't拥有旧数据或新数据的副本。除非您真的更担心速度,否则我会避免使用它完全数据。
明显的代码:
std::ifstream input("filename");
std::ofstream output("filename2");
std::string line;
while (std::getline(input, line))
output << line << " new data new data new datan";
从我在您中读到的问题,您想要:
- 阅读行
- 向其添加新数据
- 存储所有更新的行
- 用新行覆盖文件
这是一种可能的插入:
ifstream infile("filetobeupdated.txt");
if(!infile) error("Can't open file: ", filetobeupdated);
// vector holding old data
string line;
vector<string>oldlines;
while(getline(infile,line)) oldlines.push_back(line);
infile.close();
// vector holding newdata
vector<string>newdata;
// vector holding updated data
vector<string>updateddata;
// concatenate old line + new data
for(size_t i=0, i<oldlines.size();i++) updateddata.push_back(oldlines[i]+newdata[i]);
// overwrite old file with new data
ofstream onfile("filetobeupdated.txt");
if(!onfile) error("Can't open file: ", filetobeupdated);
for(size_t i=0, i<newdata.size();i++) onfile << newdata[i] <<'n';
onfile.close();
这就是" ios :: app"的工作方式 - 在文件末尾添加数据。
您可能要先读取每一行,然后覆盖所有行。
- 从 bmp 文件数据创建 MFC CBitmap
- 从存储为 Windows 资源 (c++) 的 png 中获取 png 文件数据
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 获取文件数据预处理器宏
- 错误的值是使用c++从CSV文件数据写入数组
- 无法在可视C++中检索资源文件数据
- 将文本文件数据读入字符数组时提取运算符的歧义
- 如何使用curl c ++源代码发布wav文件数据,如何使用c ++使用--data-binary?
- 如何在C++中读取 UTF-8 文件数据
- 如何在结构中存储二进制文件数据
- 无法从 turbo c 程序中的文件检索文件数据
- 使用 fstream 将文件数据从当前位置保存到文件末尾
- 通过Google Protobuf发送二进制文件数据
- 在通过套接字向服务器发送文件数据时,我得到了一些垃圾值?为什么
- 如何使用dlang读取二进制文件数据
- 程序使用FSCANF读取文件数据后崩溃
- 检测二进制文件数据的端性
- C++ 从文本文件数据类型读取为结构,并将数据存储在列表的向量中
- 将 FFT 应用于 WAV 文件数据的 C++
- C++内存映射的文件数据预取