Pregunta

Esto es lo que yo estoy tratando de hacer:abierto todos los argumentos de línea de comandos como archivos (binarios) y leer bytes de ellos.El constante cambio de sintaxis aquí no es conductivo a googlear, pero aquí es lo que he averiguado hasta el momento:

use std::io::{File, result};
use std::path::Path;
use std::os;

fn main() {
    let args = os::args();
    let mut iter = args.iter().skip(1); // skip the program name

    for file_name in iter {
        println(*file_name);
        let path = &Path::new(*file_name);
        let file = File::open(path);
    }
}

Este es el problema:

test.rs:44:31: 44:41 error: cannot move out of dereference of & pointer
test.rs:44         let path = &Path::new(*file_name);

He golpeado una pared de ladrillo aquí, porque mientras que yo estoy muy bien con los punteros en C, mi comprensión de los diferentes tipos de puntero en rust, es prácticamente inexistente.¿Qué puedo hacer aquí?

¿Fue útil?

Solución

Trate de &Path::new(file_name.as_slice())

Desafortunadamente, debido a la característica argumento de que Path::new() toma, si le pasas un ~str o ~[u8] que se intenta consumir ese tipo directamente.Y eso es lo que está pasando con *file_name.Excepto que no se puede mover de un puntero de eliminar en Óxido, que es la razón por la que usted está recibiendo el error.

Mediante el uso de file_name.as_slice() en lugar de ello (lo que es equivalente, en este caso, a (*file_name).as_slice(), pero el Óxido hará la eliminación de referencias para usted) se va a convertir el ~str a un &str, que puede ser transmitida a Path::new() sin un problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top