C ++文件I / O问题

时间:2010-04-22 08:19:53

标签: c++ file-io fstream ifstream ofstream

我正在尝试打开一个通常有内容的文件,为了测试的目的,我想在没有文件可用/现有的情况下初始化程序,因此程序应该创建空的,但是在实现它时遇到问题。这是我原来的代码

void loadFiles() {
fstream city;
    city.open("city.txt", ios::in);
fstream latitude;
    latitude.open("lat.txt", ios::in);
fstream longitude;
    longitude.open("lon.txt", ios::in);
while(!city.eof()){
    city >> cityName;
    latitude >> lat;
    longitude >> lon;
    t.add(cityName, lat, lon);
}
city.close();
latitude.close();
longitude.close();
}

我已经尝试了所有我能想到的,ofstream,ifstream,添加ios::out所有变体。任何人都可以解释我该怎么做以解决问题。谢谢!

4 个答案:

答案 0 :(得分:4)

您已发布用于阅读文件的代码,而不是创建空文件 - 您需要在这方面扩展您的问题。你发布的内容并不是很好的阅读代码。 eof()函数在读取之后检测文件结尾,而不是在读取之前 - 基本上,您几乎不应该使用它。相反,您应该测试每次读取的成功:

while( (city >> cityName) && (latitude >> lat) && (longitude >> lon) {
    t.add(cityName, lat, lon);
}

另外,如果要创建输入流,为什么不使用ifstream对象显式地这样做:

ifstream city( "city.txt" );

无需乱搞ios标志。你应该真的测试开放是否也有效:

if ( ! city.is_open() ) {
   throw "open failed" ;   // or whatever
}

答案 1 :(得分:2)

首先,如果您不确定文件执行是否存在,请将citylatlon设置为某些合理的默认值。

其次,您可以直接使用is_open的{​​{1}}成员:

fstream

如果由于某种原因从文件读取失败,您仍然将所有变量设置为默认值。

答案 2 :(得分:1)

使用ifstream.fail()检查文件是否正确打开。如果出现问题,它返回true(文件不存在或者您没有读取权限或者我不知道的其他内容)。因此,当失败时,您可以使用ofstream.open()创建一个。

答案 3 :(得分:1)

如果你想(非破坏性地)创建一个文件(如果没有),你可以在附加模式(ios::app)中打开它,如果它不存在则会创建它,并离开如果它没有触及它。