使用fstream输入输出

时间:2015-05-13 15:38:55

标签: c++ fstream

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

#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;
}

5 个答案:

答案 0 :(得分:1)

解决方案:

  

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

"fsfile2.txt"
  

然后,我尝试删除

ios::in
  

因为第一个进程只写入文件,并且通过删除它,文件被创建并且&#34;哇&#34;也写在它上面。

     

为了这些行

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

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

附加:

您也可以更改

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

fs << "wow";

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

fs >> str;

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

#include <string>
string str;

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

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

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

以下是改进的代码段:

#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
  

由于您的代码尚未处理二进制文件。

我尝试过这些并且工作正常!祝你有愉快的一天!

答案 1 :(得分:1)

试试此代码

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

答案 2 :(得分:1)

通过使用open(),如果这是你的目标,那么将不会创建该文件。 如果您想创建新文件,请查看:fstream won't create a file

如果文件存在,则不会在正确的路径中查找它。或者将文件名更改为完整路径或将可执行文件放在文件所在的文件夹中。

希望这有帮助。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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