fstream没有在文件上写任何东西

时间:2015-02-25 05:11:17

标签: c++ fstream

我正在尝试将一些内容写入文本文件,但它甚至不会创建文件。如果你能帮助我,我将非常感激。感谢。

#include <fstream>
#include <iostream>

int main(){
    std::ofstream file;
    file.open("path/to/file");

    //write something to file
    file << "test";

    //printing to screen
    std::cout << file.rdbuf();  

    //closing file
    file.close(); 

    return 0;
}

3 个答案:

答案 0 :(得分:2)

以下行是您的罪魁祸首:

std::cout << file.rdbuf();

您不能使用rdbuf输出仅为写入操作打开的文件。

删除该行,您的文件将被正确写入。


如果您想在写完文件后阅读文件:

解决方案1: 使用file打开fstream进行读写操作:

std::fstream file("path/to/file", std::ios::in | std::ios::out);
// ... write to file

file.seekg(0); // set read position to beginning of file
std::cout << file.rdbuf();

解决方案2: 创建一个新的std::ifstream以从文件中读取:

 // ... write to file
 file.close(); // call `close` to make sure all input is written to file

 std::ifstream inputFile("path/to/file");
 std::cout << inputFile.rdbuf();

答案 1 :(得分:0)

salesFile.open("C:\\Users\\Tebsan\\Desktop\\Coding\\c++\\re\\salesFile.txt"); // ...try to open existing file
    if( !salesFile.is_open() ) // ...else, create new file...
        salesFile.open("C:\\Users\\Tebsan\\Desktop\\Coding\\c++\\re\\salesFile.txt", ios_base::in | ios_base::out | ios_base::trunc);

您必须使用

的显式openmode参数调用fstream :: open
ios_base::in | ios_base::out | ios_base::trunc

否则打开将因ENOENT而失败。

答案 2 :(得分:0)

感谢您的帮助! 我从中学到了新东西。有趣的是,问题是文件的名称,显然名称太长了,对于包含文件流的新文件,我只是在名称的末尾添加了流,因此编译器继续运行第一个文件(没有文件流)...