【问题标题】:Input Output with fstream使用 fstream 输入输出
【发布时间】:2015-05-13 15:38:55
【问题描述】:

谁能告诉我这段代码有什么问题?我总是打不开。

#include <iostream>
#include <fstream>

using namespace std;

int main(){
    fstream fs;
    fs.open("fsfile2",ios::in|ios::out|ios::binary);
    if(fs.is_open()){
    fs.write("wow",sizeof("wow"));
    char str[20];
    fs.read((char*)str,sizeof(str));
    cout<<str<<endl;}
    else 
        cout<<"Not open\n";
    return 0;
}

【问题讨论】:

  • 除了缩进,这让我们阅读起来有不必要的困难?
  • 您确定fsfile2 位于您的程序运行所在的同一目录中?
  • 文件是否已经存在?如果没有,则将 ios::app 或 ios::trunc 添加到标志中。
  • 没有。我认为这就是问题所在。谢谢你。顺便说一句,你能给我缩进提示吗?我是初学者。
  • 您的fs.read 将尝试阅读您刚刚写的“哇”之后的内容。如果你想读回“哇”,你需要回到文件开始,或者关闭并重新打开。

标签: c++ fstream


【解决方案1】:

试试这个代码

fs.open("fsfile2", ios::app|ios::in|ios::out|ios::binary);

【讨论】:

    【解决方案2】:

    像你一样使用 open() 如果这是你的目标,则不会创建该文件。 如果您想创建一个新文件,请查看:fstream won't create a file

    如果文件存在,则说明您没有在正确的路径中查找它。或者把文件名改成全路径或者把可执行文件放到文件所在的文件夹里。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      您可能没有权限在可执行文件所在的目录中创建文件。

      【讨论】:

        【解决方案4】:

        解决方案:

        请在文件名中添加文件扩展名。 如果是文本文件,则为

        "fsfile2.txt"
        

        然后,我尝试删除

        ios::in
        

        因为第一个进程只写入文件,通过删除文件,文件被创建,“哇”也被写入其中。

        为了这些行

        fs.read((char*)str,sizeof(str));
        cout<<str<<endl;
        

        工作, 您需要在写入后关闭流,然后以读取模式打开流,然后读取内容。请注意,关闭流将保存编辑后的文件。

        补充:

        你也可以改变

        fs.write("wow",sizeof("wow"));
        

        fs << "wow";
        

        从文件读取时也可以这样做,

        fs >> str;
        

        你也可以使用C++的string类,而不是char数组,这样文件中的字符数就不再是你的问题了。

        #include <string>
        string str;
        

        建议检查 EOF(文件结尾),因为文件是逐行读取的。一旦你添加了一个新行并向该行添加一个字符,直到 EOF 才循环的代码将只读取文件的第一行。

        为了解决这个问题,建议循环直到到达EOF。

        while(!fs.eof()) {
             fs >> str;
             cout << str << endl;
        }
        

        所以这是改进后的 sn-p:

        #include <string>
        
        fs.open("fsfile2.txt", ios::out); // ios::out for write only
        if(fs.is_open()) {
        
            // writes "wow" to file
            fs << "wow"; 
        
            // closes the file
            fs.close();
        
            // ios::in for read only
            fs.open("fsfile2.txt", ios::in); 
        
            // better to define variable just before using it
            string str;
        
            // loops until end-of-file
            while(!fs.eof()) {
        
                // reads a line from file, stores it to str
                fs >> str;
        
                // shows str to screen
                cout << str << endl;
            }
        }
        

        *注意:我删除了

        ios::binary
        

        因为您的代码还没有处理二进制文件。

        我试过这些,效果很好!祝你有美好的一天!

        【讨论】:

          【解决方案5】:

          fstream fs; 不会为您创建新文件。
          您需要确保该文件存在于您的项目目录中。
          另一方面,如果您要使用ofstream fs("file.txt");,它将为您创建文件。或者在打开 fstream fs 时仅使用 ios::out,这将为您创建文件。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-05-29
            • 1970-01-01
            • 2013-04-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多