输出文件流是用于写入文件的C ++标准库对象。
可能的重复: 我需要手动关闭 ifstream 吗? 我是否需要调用 fstream.close() 或者 fstream 是一个在销毁时关闭流的正确 RAII 对象吗? 我有一个本地 std::ofs...
我为我的一个C++项目创建了一个“File”类,它基于ofstream。这是简化的代码: 文件.h #包括 #包括 #包括 我为我的一个C++项目创建了一个“File”类,它基于ofstream。这是简化的代码: 文件.h #include <fstream> #include <mutex> #include <filesystem> #include <vector> class File { private: std::ofstream writer; static std::mutex file_mtx; std::filesystem::path path; public: File(); File(const std::filesystem::path &_path); void write(const std::vector<std::string> &lines); }; 文件.cpp File::File(const std::filesystem::path &_path) : path(_path) { // Create file std::lock_guard<std::mutex> lock(file_mtx); writer.open(path, std::ios::app); writer.close(); } void File::write(const std::vector<std::string> &lines) { std::lock_guard<std::mutex> lock(file_mtx); writer.open(path, std::ios::app); if (!writer.is_open()) return; for (const auto &line : lines) writer << line << "\n"; writer.close(); } std::mutex File::file_mtx; 我仅在需要提高效率时才使用 ofstream 打开文件,并且使用互斥锁来防止两个不同的对象同时写入同一文件。写入功能也在附加模式下打开(std::ios::app)。 这是我的“测试”代码: #include "file.h" int main(int argc, char *argv[]) { File test("./test.txt"); test.write({ "Hello", "World" }); File test2("./test.txt"); test2.write({ "Part", "2" }); return 0; } 我对同一个文件有两个不同的变量的原因是因为在我的实际代码中,必须在两个不同的作用域中访问该文件,因此必须定义两个变量。 这是文件的输出: Part 2 这是预期的输出: Hello World Part, 2 尽管互斥体在函数开始时被锁定,并且尽管文件以追加模式打开,但文件仍然会被覆盖。我想知道为什么会发生这种情况,以及为什么互斥体首先不能阻止文件被覆盖。 这是我的最小可重现示例: #include <fstream> #include <mutex> #include <filesystem> #include <vector> class File { private: std::ofstream writer; std::filesystem::path path; public: File(const std::filesystem::path &_path) : path(_path) { // Create file writer.open(path, std::ios::app); writer.close(); } void write(const std::vector<std::string> &lines) { if (!writer.is_open()) return; for (const auto &line : lines) writer << line << "\n"; writer.close(); } }; int main(int argc, char *argv[]) { File test("./test.txt"); test.write({"Hello", "World"}); File test2("./test.txt"); test2.write({"Part", "2"}); return 0; } 您的问题与互斥体无关。在您最初发布的代码中,该文件在构造函数中重新创建: File::File(const std::filesystem::path& _path) : path(_path) { // Create file std::lock_guard<std::mutex> lock(file_mtx); writer.open(path); writer.close(); } 然后将上面的代码替换为: File(const std::filesystem::path& _path) : path(_path) { // Create file writer.open(path, std::ios::app); writer.close(); } 此代码不会重新创建文件,但不会产生预期的结果,因为文件是以追加模式打开的。因此,每次运行程序时,都会附加文本: Hello World Part 2 Hello World Part 2... 您可能想要的是 Reset 方法: File(const std::filesystem::path& _path) : path(_path) { // no code here } void Reset() { // the code you originally placed in constructor } int main(int argc, char* argv[]) { File("./test.txt").Reset(); // ... }
我正在使用 C++ 在 Qt 应用程序中实现文件保存功能。 我正在寻找一种方法来检查所选文件在写入之前是否已存在,以便我可以提示
我想确保ofstream已写入磁盘设备。执行此操作的可移植方式(在 POSIX 系统上可移植)是什么? 如果我单独打开文件是否可以解决问题...
我们面临设备重启的问题。我们正在树莓派板上的 Linux 操作系统中运行我们的应用程序。我们正在维护一个日志文件,每 10 秒向其中添加一次记录 b...
我已经实现了Unordered Map容器和copyIf算法 模板 _OutputIter copyIf(_InputIter source_beg, _InputIter
fprintf 与 std::ofstream 的性能非常令人惊讶(fprintf 非常慢)
我正在运行一些基准测试,以找到在 C++ 中将大型数组写入文件的最有效方法(在 ASCII 中超过 1Go)。 所以我将 std::ofstream 与 fprintf 进行了比较(请参阅下面我使用的开关)...
std::ofstream 打开成功,但是当我调用 write 时出现错误“没有这样的文件或目录”
我有这样的cpp代码: std::ofstream fs; fs.open("a.txt", ios::out | ios::binary | ios::app); 如果(fs) { if(!fs.write(缓冲区, buffer_size)) { std::cout << strerror...
我是 C++ 新手,想在 .txt 文件上写入数据(整数)。数据位于三列或更多列中,稍后可以读取以供进一步使用。我已经成功创建了一个阅读项目,但是......
我的任务是聚合一个包含“年收入”和“人口”(按“地区”)的 CSV 文件。因此,如果 A 区有 3 个城市,人口分别为 100、123 和 50(与...
为什么下面的代码有效,但是如果我添加“fin.exceptions(ifstream::badbit | ifstream::failbit);”为了使第二次 try/catch 工作,我收到错误?
我的代码: int main() { 字符串路径 = "D:\myFile.txt"; 点 pointOfIllusion(1, 2, 3); 点 pointOfDesilusion(3, 2, 1); 流外 fout; fout.Exceptions(ofstream::b...
每当我重新运行代码后将数据写入文件时,文件的内容就会消失 #包括 #包括 使用命名空间 std; int main(){ 字符串
std::ofstream 在调试配置中进行调试时打开,但在发布配置中则不会打开 (Visual Studio 2022)
抱歉格式不当 - 这是我第一次在这里问问题。 我正在开发一个项目,其中涉及将一些信息写入文件。当我在调试环境中运行或调试程序时...
ifstream、ofstream 和 fstream 有什么区别? [重复]
在文件处理中,我遇到了ifstream、ofstream和fstream。谁能告诉我它们之间的主要区别?
缓冲区的默认大小通常为 8192 字节,但这取决于实现。如何从 std::ofstream 对象获取当前缓冲区大小的实际值?
我正在尝试制作一个 C++ 函数,该函数在与二进制文件相同的目录中创建一个名为 log.txt 的文件并输出数据。 当我使用 ofstream 时,它会在源代码所在的位置创建文件。 如果我移动...
我在分配时遇到了一些麻烦,我需要生成一个由数组中的结构组成的数据库文件。 Currently when the selection is made to print the table no noticeable e...
使用自定义复制构造函数创建包含 std::ofstream 的类的 std::vector
我目前正在尝试使用 std::ofstream 编写一个日志类来写入文件。该类如下: #ifndef LOG_H #定义LOG_H #包括 #包括 类日志...
做一个项目,我必须从 .txt 文件中读取葛底斯堡演说,并使用二叉搜索树作为方法在输出文件中按字母顺序输出单词及其词频...
我有一个单例记录器类,它将用于将数据写入单个文件,我只是想知道在应用程序崩溃的情况下如何处理 ofstream 对象。 #ifndef LOG_ERROR_H_ #定义