写文件无法正常工作

时间:2016-02-07 14:01:37

标签: c++ file save fstream ofstream

我试图将一些输入保存到文件中,但它似乎无法正常工作。我不知道它的文件扩展名是什么,或者其他什么,但我现在试图将其修改一小时,但它不会弹出我文件夹中的某个文件。

这是我的代码工作的方式(不发布所有内容,会太长)

这是我的功能:

void mobiltelefon::savePhoneOnFile() const
{
    ofstream out;
    out.open("C:\\temp\\phones.txt", ios::in);
    out << this->numberofphones << endl;
    for (int i = 0; i < this->numberofphones; i++) {
        out << this->phones[i]->getPhonename() << endl;
        out << this->phones[i]->getPrice() << endl;
    }
    out.close();
}

这就是我在main中的称呼方式:

case 7:
    cout << "Save the phones on file" << endl;
    fb.savePhoneOnFile();
    break;

我无法看到自己的错误。当我尝试保存文件时,为什么文件不显示在我的文件夹中?

2 个答案:

答案 0 :(得分:1)

如果您尝试打开文件进行编写,则应使用ios::out作为第二个参数

ofstream out("C:\\temp\\phones.txt", ios::out);

各种open modes

  

app在每次写入之前寻找流的结尾   binary以二进制模式打开
  in开放供阅读   out开放写作   打开时,trunc会丢弃流的内容   ate在打开后立即寻求到流的结尾

答案 1 :(得分:1)

下面:

ofstream out;
out.open("C:\\temp\\phones.txt", ios::in);

您不希望拥有std::ios::in标志。你为什么这样?您正在写一个文件,而不是从中读取文件。

解释: std::ofstreamits constructorstd::ios_base::out的flag参数进行按位或运算,并将其传递给std::basic_filebuf::open。在该链接中查找out | in即可获得答案。该文件需要存在才能正常打开。它不会被创造出来。

完全省略该参数,它将默认为std::ios_base::out(这应该是你应该拥有的):

out.open("C:\\temp\\phones.txt");

你可以在施工时立刻做到这一点:

std::ofstream out("C:\\temp\\phones.txt");