es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problemas al pasar un objeto File a una función.

Estoy intentando leer y escribir archivos pasando un objeto File. Me sigue dando errores diciendo que el descriptor de archivo no es válido.

¿Tiene esto algo que ver con cómo funciona Rust en memoria? Por ejemplo, si hago lo siguiente, no funciona, diciendo que el método write_all no se encuentra en el archivo. También intenté declararlo como std::fs::File pero no funciona.

¿Cuál es la solución para esto? Podría simplemente pasar el nombre del archivo, pero abrir y cerrar el archivo constantemente parece extraño.

fn escribir_en_archivo(fd: File, data: &str) {
    fd.write_all(data.as_bytes()).expect("error al escribir");
}

fn main() {
    let nombre_archivo = "prueba.txt";
    let mut fd = File::create(nombre_archivo).expect("error al crear el archivo");
    escribir_en_archivo(fd, "texto a escribir");
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Es posible que el objeto File no esté siendo inicializado correctamente o se cierre prematuramente. También podría haber un problema con los permisos de archivo.

    Una solución podría ser utilizar la estructura std::fs::OpenOptions para abrir el archivo con los permisos apropiados y luego pasar el objeto File resultante a la función en lugar de crear un archivo nuevo dentro de la función. De esta manera, el archivo permanece abierto y se puede escribir en él varias veces.

    Aquí hay un ejemplo:

    use std::fs::{File, OpenOptions};
    use std::io::Write;
    
    fn write_to_file(fd: &mut File, data: &str){
        fd.write_all(data.as_bytes()).expect("error writing");
    }
    
    fn main(){
       let filename = "testing.txt";
       let mut fd = OpenOptions::new().create(true).append(true).open(filename).expect("error opening file");
       write_to_file(&mut fd,"texto a escribir");
    }
    

    En este ejemplo, la estructura OpenOptions se utiliza para crear un archivo si no existe (create(true)) y para añadir contenido a un archivo existente (append(true)). El objeto File resultante se pasa luego a la función write_to_file por referencia (&mut) y se escribe en él utilizando el método write_all.

Comments are closed.