/ / Strano problema di fstream - c ++, fstream

Strano problema di fstream - c ++, fstream

Ho un problema davvero strano In Visual C ++ Express, ho un codice molto semplice, solo:

#include <fstream>
using namespace std;
int main()
{
fstream file;
file.open("test.txt");
file<<"Hello";
file.close();
}

Questo stesso codice funziona correttamente nel mio unico progetto, ma quando creo ora progetto e utilizzo le stesse linee di codice, non viene creato alcun file test.txt. Per favore, cosa c'è che non va? ¨

EDIT: mi aspetto di vedere test.txt in VS2008 / nome_progetto / debug - proprio come fa il primo progetto funzionale.

risposte:

3 per risposta № 1

Codice canonico per scrivere in un file:

#include <fstream>
#include <iostream>
using namespace std;

int main() {
ofstream file;
file.open("test.txt");
if ( ! file.is_open() ) {
cerr << "open errorn";
}

if ( ! (  file << "Hello" ) ) {
cerr << "write errorn";
}

file.close();

}

Ogni volta che si esegue un I / O di file, è necessario testare ogni singola operazione, con la possibile eccezione della chiusura di un file, di cui non è generalmente possibile eseguire il ripristino.

Per quanto riguarda il file che viene creato da qualche altra parte - semplicemente dargli un nome strano come mxyzptlk.txt e quindi cercarlo utilizzando Windows Explorer.


2 per risposta № 2

Forse l'eseguibile viene eseguito in una directory diversa rispetto a prima, facendo apparire test.txt da qualche altra parte. Prova a utilizzare un percorso assoluto, ad esempio "C:\Users\NoName\Desktop\test.txt" (I doppi backslash sono necessari come caratteri di escape nelle stringhe C).


2 per risposta № 3

fstream::open() prende due argomenti: filename e mode. Dal momento che non stai fornendo il secondo, potresti voler controllare in quale argomento di default si trovi fstream è o fornire ios_base::out te stesso.

Inoltre, potresti voler controllare se il file è aperto. È possibile che non si disponga di autorizzazioni di scrittura in directory di lavoro corrente (dove "test.txt" verrà scritto dal momento che non si fornisce un percorso assoluto). fstream fornisce il is_open() metodo come un modo per verificarlo.

Infine, pensa a indentare il tuo codice. Mentre ci sono solo poche righe, il codice può diventare presto difficile da leggere senza indentazione adeguata. Codice di esempio:

#include <fstream>
using namespace std;
int main()
{
fstream file;
file.open("test.txt", ios_base::out);
if (not file.is_open())
{
// Your error-handling code here
}
file << "Hello";
file.close();
}

1 per risposta № 4

Puoi usare Process Monitor e filtra l'accesso ai file e il tuo processo per determinare se l'open / write ha successo e dove si trova sul disco.


1 per risposta № 5

Ci sono due modi per risolvere questo problema. O fai:

file.open ("test.txt", ios :: out)

#include <fstream>

using namespace std;

int main()
{
fstream file;
file.open("test.txt", ios::out);
file<<"Hello";
file.close();
}

O puoi creare un ofstream invece di fstream.

#include <fstream>

using namespace std;

int main()
{
ofstream file;
file.open("test.txt");
file<<"Hello";
file.close();
}