C ++ Soubor I / O problém

hlasů
0

Snažím se otevřít soubor, který má normálně obsahu, pro účely testování budu rád inicializovat program bez soubory jsou k dispozici / stávající ano, pak program by měl vytvářet ty prázdné, ale jsem s problémy, které ji provádějí. To je můj kód původně

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();
}

Zkoušel jsem všechno, co mě napadá, ofstream, ifstream a dodává ios::outvšechny všechny jeho variace. Mohl by někdo vysvětlit mi, co mám dělat, aby se problém vyřešit. Dík!

Položena 22/04/2010 v 09:19
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
4

Jste vyslán kód pro čtení souborů, nevytváří ty prázdné - musíte t rozšířit svou otázku v tomto ohledu. A to, co jste zaslali není dobré kód pro čtení. Funkce eof () detekuje konec souboru v návaznosti na čtení, a to před jednou - v podstatě byste měli téměř nikdy použít. Místo toho byste měli vyzkoušet úspěch každé čtení:

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

Také, pokud chcete vytvořit vstupní proud, proč ne dělat tak explicitně pomocí objektu ifstream:

ifstream city( "city.txt" );

Není třeba, aby nepořádek kolem se systémem iOS vlajky. Opravdu byste měli vyzkoušet, pokud je otevřený pracoval také:

if ( ! city.is_open() ) {
   throw "open failed" ;   // or whatever
}
Odpovězeno 22/04/2010 v 09:33
zdroj uživatelem

hlasů
1

Použijte ifstream.fail () pro ověření, zda je soubor správně otevřít. Vrací hodnotu true, pokud se něco pokazí (soubor neexistuje, nebo nemáte oprávnění ke čtení nebo STG ještě mi není známa). Takže když se nepodařilo můžete vytvořit s ofstream.open ().

Odpovězeno 22/04/2010 v 09:35
zdroj uživatelem

hlasů
1

Chcete-li (nedestruktivní) vytvořit soubor, pokud není ani jeden, můžete jej otevřít v režimu připojení ( ios::app), která se vytvoří, pokud neexistuje, a nechat ho nedotčený, jestli to dělá.

Odpovězeno 22/04/2010 v 09:40
zdroj uživatelem

hlasů
2

Za prvé, pokud si nejste jisti, že soubory dělat existuje - sada city, lata lonna některých rozumných hodnoty.

Za druhé, můžete použít přímo is_openčlen fstream:

fstream f;
f.open("f.txt", ios::in);
if (f.is_open()) {
    // attempt reading here
} else {
    f.open("f.txt", ios::out | ios::app); // create empty file
}

Pokud čtení z soubory z nějakého důvodu selže stále máte všechny proměnné nastaveny na výchozí hodnoty.

Odpovězeno 22/04/2010 v 09:43
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more