Permalänk
Medlem

c++ open/close

Hejsan, sitter med ett löjligt litet fel men kan inte komma på vad felet är! När jag kör programmet så tömmer den min fil (varden.txt), varför gör den det?!?

Efter programmet körts är varden.txt helt tom!

Har lokaliserat problemet till denna biten av kod:

#include <iostream> #include <string> #include <fstream> #include <stdlib.h> #include <iomanip> #include <math.h> using namespace std; int main() { //Programmet startar med att läsa in en fil cout << "Startar med att läsa in en fil: varden.txt" << endl << endl; ifstream in; in.open("varden.txt"); in.close(); ofstream out; out.open("varden.txt"); }

Permalänk
Medlem

in.open("varden.txt", ifstream::in);

Testa detta, då förbjuds ifstream att modifiera filen.

Visa signatur

WROOOOOOM
Citera så hittar jag tillbaka!

Permalänk
Medlem

Detta är viktigt när det gäller att läsa/skriva till fil. STÄNG FILEN NÄR DU ÄR KLAR!

då ska det lösa sig.

#include <iostream> #include <string> #include <fstream> #include <stdlib.h> #include <iomanip> #include <math.h> using namespace std; int main() { //Programmet startar med att läsa in en fil cout << "Startar med att läsa in en fil: varden.txt" << endl << endl; ifstream in; in.open("varden.txt"); in.close(); ofstream out; out.open("varden.txt"); out.close(); }

Visa signatur

OS: Win7 x64, GPU: Geforce Gigabyte GTX580 SOC
CPU: Intel i5 2500k (4.5gHz), MB: Asus P8P65 PRO Rev(3.1),
PSU: XFX 750w (modular), RAM: 2x Crosair Vengence 1600mz 4024mb
Cooling: CoolIT ECO A.L.C CPU COOLER
Chassi: Raven rv03

Permalänk
Medlem
Skrivet av Achronos:

in.open("varden.txt", ifstream::in);

Testa detta, då förbjuds ifstream att modifiera filen.

Skrivet av ediz:

Detta är viktigt när det gäller att läsa/skriva till fil. STÄNG FILEN NÄR DU ÄR KLAR!

då ska det lösa sig.

#include <iostream> #include <string> #include <fstream> #include <stdlib.h> #include <iomanip> #include <math.h> using namespace std; int main() { //Programmet startar med att läsa in en fil cout << "Startar med att läsa in en fil: varden.txt" << endl << endl; ifstream in; in.open("varden.txt"); in.close(); ofstream out; out.open("varden.txt"); out.close(); }

Ingen av dessa två fungerar!! Har för mig att denna koden fungerade igår men idag så blev det fel. Kör dessutom bara denna lilla bit av kod och det fungerar inte!

Vafan, kollade utan att öppna för läsning, filen blir blank så fort jag öppnar för att skriva i den! Har alltså bara detta i min kod;

#include <iostream> #include <string> #include <fstream> #include <stdlib.h> #include <iomanip> #include <math.h> using namespace std; int main() { ofstream out; out.open("a1.txt"); }

Testat att göra nya filer mm, inget verkar fungera

PS. man behöver ej stänga filer, det gör destruktorn själv! DS
PPS. Det är bara när man ska göra två olika operationer på rad som den första måste stängas, tror jag DDS

Edit: skriver den alltid över när man öppnar en fil?

Edit2: Självklart så raderar den filen innan den skriver, att jag inte tänkt på det!

Permalänk
Medlem

ja när du skriver till fil så skriver den alltid över, men det finns ett trick så du kan appenda text.

#include <iostream> #include <string> #include <fstream> #include <stdlib.h> #include <iomanip> #include <math.h> using namespace std; int main() { //Programmet startar med att läsa in en fil cout << "Startar med att läsa in en fil: varden.txt" << endl << endl; ifstream in; in.open("varden.txt"); in.close(); ofstream out; out.open("varden.txt",ios::app); out.close(); }

Oavsätt om nu destruktorn som du påstår stänger filen, så ska du alltid göra det manuellt endå.

Visa signatur

OS: Win7 x64, GPU: Geforce Gigabyte GTX580 SOC
CPU: Intel i5 2500k (4.5gHz), MB: Asus P8P65 PRO Rev(3.1),
PSU: XFX 750w (modular), RAM: 2x Crosair Vengence 1600mz 4024mb
Cooling: CoolIT ECO A.L.C CPU COOLER
Chassi: Raven rv03

Permalänk
Medlem
Skrivet av ediz:

ja när du skriver till fil så skriver den alltid över, men det finns ett trick så du kan appenda text.

#include <iostream> #include <string> #include <fstream> #include <stdlib.h> #include <iomanip> #include <math.h> using namespace std; int main() { //Programmet startar med att läsa in en fil cout << "Startar med att läsa in en fil: varden.txt" << endl << endl; ifstream in; in.open("varden.txt"); in.close(); ofstream out; out.open("varden.txt",ios::app); out.close(); }

Oavsätt om nu destruktorn som du påstår stänger filen, så ska du alltid göra det manuellt endå.

Min lösning fick bli att flytta koden till där jag öppnar filen till ett ställe jag vill skriva över filen! Borde egentligen haft koden där från början.