2011-03-19 15 views
9

Estoy usando Visual C++ 2008. Quiero crear un archivo de texto y escribir en él.crear un archivo de texto y escribir en él

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

Aquí está mostrando el error de filestream

+0

por favor edite su publicación y agregue el mensaje de error exacto que tiene. Además, el código completo (correctamente formateado, con los encabezados) probablemente sea útil. – Mat

+0

@user: ¿De dónde viene 'FileStream'? ¿Por qué estás creando dos flujos? ¿Por qué estás creando tus transmisiones dinámicamente? ¿Eres un programador de Java que cambió a C++? –

+1

FileStream? Esa es una clase .NET ¿verdad? ¿Estás tratando de hacer C++? O C++/CLI? –

Respuesta

12

se produce un error porque tiene fs declarado dos veces en dos formas diferentes; pero no mantendría nada de ese código, ya que es una extraña mezcla de C++ y C++/CLI.

En su pregunta no está claro si desea hacer C++ estándar o C++/CLI; asumiendo que usted quiere C "normal" ++, que debe hacer:

#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; 
} 

cuenta que me quita todo el material new ya que muy a menudo no lo necesita en C++ - sólo se puede asignar el objeto de secuencia en la pila y olvide las fugas de memoria que estaban presentes en su código, ya que los punteros normales (no administrados por GC) no están sujetos a la recolección de basura.

+3

puede * y debe * [solo asignar en la pila] –

3

Éstos son ejemplos para ambos nativos y manejado C++:

Asumiendo que están contentos con una solución nativa de las siguientes obras muy bien:

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

Sin embargo, yo no usaría memoria dinámica para el fstream objeto (es decir, la nueva instrucción y los puntos). Esta es la nueva versión:

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

EDITAR, la pregunta fue editada para solicitar una solución nativa (originalmente no estaba claro), pero voy a dejar esta respuesta, ya que puede ser de utilidad para alguien

Si está buscando una opción CLI de C++ (para código administrado), le recomiendo usar StreamWriter en lugar de FileStream. StreamWriter le permitirá trabajar con cadenas administradas. Tenga en cuenta que elimine se llame al método Dispose en la interfaz IDisposable y la basura recogida dará a conocer la memoria con el tiempo:

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

se crea un texto. Pregúntele al usuario si le gustaría enviarlo. Si dice que sí, esto significa que este mensaje en particular debe etiquetarse como mensaje de bandeja de salida, de lo contrario debería ser un mensaje de la bandeja de entrada.

+1

La pregunta es claramente acerca de los archivos '.txt', no de los mensajes SMS. Nada en esta respuesta se refiere a archivos de texto o Visual C++ 2008. –

+0

@Amad Munir Lo que estabas pensando al publicar esa respuesta –

Cuestiones relacionadas