C++ 在文件开头添加文本和行(C+;+;)
我希望能够在文件的开头添加行 我正在编写的这个程序将从用户那里获取信息,并准备将其写入文件。那么,该文件将是一个已经生成的diff,并且添加到开头的是描述符和标记,使其与Debian的DEP3补丁标记系统兼容 <>这需要跨平台,所以它需要在GNU C++(Linux)和微软C++(以及MAC所附带的任何东西)中工作。 (其他相关线程:)请参阅答案: 不能在磁盘上文件的开头插入数据。您需要将整个文件读入内存,在开头插入数据,然后将整个文件写回磁盘。(这不是唯一的方法,但考虑到文件不太大,这可能是最好的方法。) 可以通过对输入文件和输出文件使用来实现这一点。之后,您可以使用和替换旧文件:C++ 在文件开头添加文本和行(C+;+;),c++,cross-platform,C++,Cross Platform,我希望能够在文件的开头添加行 我正在编写的这个程序将从用户那里获取信息,并准备将其写入文件。那么,该文件将是一个已经生成的diff,并且添加到开头的是描述符和标记,使其与Debian的DEP3补丁标记系统兼容 这需要跨平台,所以它需要在GNU C++(Linux)和微软C++(以及MAC所附带的任何东西)中工作。 (其他相关线程:)请参阅答案: 不能在磁盘上文件的开头插入数据。您需要将整个文件读入内存,在开头插入数据,然后将整个文件写回磁盘。(这不是唯一的方法,但考虑到文件不太大,这可能是最好的
#include <iostream>
#include <fstream>
#include <string>
#include <cstdio>
int main(){
std::ofstream outputFile("outputFileName");
std::ifstream inputFile("inputFileName");
outputFile << "Write your lines...\n";
outputFile << "just as you would do to std::cout ...\n";
outputFile << inputFile.rdbuf();
inputFile.close();
outputFile.close();
std::remove("inputFileName");
std::rename("outputFileName","inputFileName");
return 0;
}
可能的重复看起来确实像重复,但另一个问题没有很好的答案。@JonathanWakely您知道一种更好的跨平台语言吗?用于文本处理?当然,python。@JonathanWakely我也会问如何在python中做到这一点(在另一个问题中),因为我更愿意在linux平台上使用python。我选择C++是因为Linux、MAC和Windows都可以运行C++(不需要维护两个程序)。在Windows中设置python是。。。这个词可能很狡猾。。。为了正确运行
,而在写入另一个文件后,
循环可以替换为outputFile,他可以删除
原始文件,并重命名
具有原始名称的另一个文件。但是,在执行此操作之前,您可能想在fstream
上调用close
。与其使用vector
为什么不直接使用stringstream
?感谢您的建议,我想这不是我最好的日子:/…(std::vector
而不是std::stringstream
?真的吗?该死,我相信我写那篇文章的时候睡着了)。是的,现在看起来好多了:)
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
int main(){
const std::string fileName = "outputFileName";
std::fstream processedFile(fileName.c_str());
std::stringstream fileData;
fileData << "First line\n";
fileData << "second line\n";
fileData << processedFile.rdbuf();
processedFile.close();
processedFile.open(fileName.c_str(), std::fstream::out | std::fstream::trunc);
processedFile << fileData.rdbuf();
return 0;
}