2011-03-19 13 views
9

Sto usando Visual C++ 2008. Voglio creare un file di testo e scrivere su di esso.creare un file di testo e scrivere su di esso

char filename[]="C:/k.txt"; 
FileStream *fs = new FileStream(filename, FileMode::Create, FileAccess::Write); 
fstream *fs =new fstream(filename,ios::out|ios::binary); 
fs->write("ghgh", 4); 
fs->close(); 

Qui sta mostrando errore di FileStream

+0

si prega di modificare il tuo post e aggiungere il messaggio di errore esatto che avete. Anche il codice completo (formattato correttamente, con le intestazioni) sarebbe probabilmente d'aiuto. – Mat

+0

@user: da dove proviene 'FileStream'? Perché stai creando due stream? Perché stai creando i tuoi flussi dinamicamente? Sei un programmatore Java passato a C++? –

+1

FileStream? Questa è una classe .NET, giusto? Stai cercando di fare C++? O C++/CLI? –

risposta

12

si ottiene un errore perché hai fs dichiarato due volte in due modi diversi; ma non terrei nulla di quel codice, dato che è uno strano mix di C++ e C++/CLI.

Nella domanda non è chiaro se si desidera eseguire standard C++ o C++/CLI; supponendo che si desidera "normale" C++, si dovrebbe fare:

#include <fstream> 
#include <iostream> 

// ... 

int main() 
{ 
    // notice that IIRC on modern Windows machines if you aren't admin 
    // you can't write in the root directory of the system drive; 
    // you should instead write e.g. in the current directory 
    std::ofstream fs("c:\\k.txt"); 

    if(!fs) 
    { 
     std::cerr<<"Cannot open the output file."<<std::endl; 
     return 1; 
    } 
    fs<<"ghgh"; 
    fs.close(); 
    return 0; 
} 

Si noti che ho rimosso tutta la roba new poiché molto spesso non è necessario in C++ - si può solo allocare l'oggetto flusso sullo stack e dimentica le perdite di memoria che erano presenti nel tuo codice, poiché i normali puntatori (non gestiti da GC) non sono soggetti alla garbage collection.

+3

può * e dovrebbe * [allocare semplicemente nello stack] –

3

Ecco alcuni esempi sia nativa e gestita C++:

si Supponendo sono felice con una soluzione nativa le seguenti opere che bene:

fstream *fs =new fstream(filename,ios::out|ios::binary); 
fs->write("ghgh", 4); 
fs->close(); 
delete fs;  // Need delete fs to avoid memory leak 

Tuttavia, non vorrei usare la memoria dinamica per il fstream oggetto (vale a dire la nuova dichiarazione e punti). Ecco la nuova versione:

fstream fs(filename,ios::out|ios::binary); 
fs.write("ghgh", 4); 
fs.close(); 

EDIT, la questione è stata modificata per richiedere una soluzione nativa (in origine non era chiaro), ma lascerò questa risposta in quanto può essere utile a qualcuno

Se si sta cercando un'opzione CLI C++ (per codice gestito), si consiglia di utilizzare StreamWriter anziché FileStream. StreamWriter ti consentirà di lavorare con stringhe gestite. Si noti che eliminare chiamerà il metodo Dispose sull'interfaccia IDisposable e la garbage collection rilascerà la memoria alla fine:

StreamWriter ^fs = gcnew StreamWriter(gcnew String(filename)); 
fs->Write((gcnew String("ghgh"))); 
fs->Close(); 
delete fs; 
-3

si crea un testo. Chiedi all'utente se vorrebbe inviarlo. Se dice sì, significa che questo particolare messaggio dovrebbe essere contrassegnato come messaggio in uscita altrimenti dovrebbe essere un messaggio di posta in arrivo.

+1

La domanda riguarda chiaramente i file '.txt', non i messaggi SMS. Niente in questa risposta si riferisce a file di testo o Visual C++ 2008. –

+0

@Amad Munir Cosa stavi pensando mentre postavi quella risposta –

Problemi correlati