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");
}
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 objetoFile
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:
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 objetoFile
resultante se pasa luego a la funciónwrite_to_file
por referencia (&mut
) y se escribe en él utilizando el métodowrite_all
.