Estoy tratando de mover un archivo de una partición a otra en un Node.js secuencia de comandos. Cuando he usado fs.renameSync he recibido Error: EXDEV, Cross-device link. Me gustaría copiarlo y eliminar el original, pero no veo un comando para copiar archivos. Cómo puede hacerse esto?

InformationsquelleAutor Jeremy Banks | 2010-12-31

5 Comentarios

  1. 51

    Usted necesita copiar y desvincular al mover archivos a través de diferentes particiones. Intenta esto,

    var fs = require('fs');
    //var util = require('util');
    
    var is = fs.createReadStream('source_file');
    var os = fs.createWriteStream('destination_file');
    
    is.pipe(os);
    is.on('end',function() {
        fs.unlinkSync('source_file');
    });
    
    /* node.js 0.6 and earlier you can use util.pump:
    util.pump(is, os, function() {
        fs.unlinkSync('source_file');
    });
    */
    • Y, a diferencia de las otras soluciones, se limpia el directorio de origen.
    • No esta muy intensivo en recursos?
    • util.la bomba está en desuso. el uso es.tubo de(os) y, a continuación, escuchar la ‘final’ del evento en la secuencia de salida.
    • Para mí fue la secuencia de entrada que estaba enviando el end evento no el flujo de salida. Así: is.pipe(os) y is.on('end', function(){}); trabajado.
    • ¿Por qué utilizar fs.unlinkSync y no fs.unlink?
    • Es posible mover el archivo desde la máquina local para el servidor?
    • esto no es un reemplazo adecuado para fs.renameSync, porque no es sincrónico.

  2. 7

    Uno más en la solución del problema.

    Hay un paquete llamado fs.extra escrito por «coolaj86» sobre el mecanismo nacional de prevención.

    Usarlo así:
    npm install fs.extra

    fs = require ('fs.extra');
    fs.move ('foo.txt', 'bar.txt', function (err) {
        if (err) { throw err; }
        console.log ("Moved 'foo.txt' to 'bar.txt'");
    });

    He leído el código fuente para esta cosa. Intenta hacer una norma fs.rename() entonces, si se produce un error, se hace una copia y elimina la original utilizando el mismo util.pump() que @chandru usos.

    • Por cierto, he hablado con coolaj86 en github y él es consciente de que util.de la bomba() está en desuso en el nodo 0.10 y será la fijación de que a la brevedad.
    • El autor de la fs-paquete extra es jprichardson y coolaj86 es un contribuyente (ver github.com/jprichardson/node-fs-extra para más información).
  3. 6

    Sé que esto ya está contestado, pero me encontré con un problema similar y terminó con algo a lo largo de las líneas de:

    require('child_process').spawn('cp', ['-r', source, destination])

    Lo que esto hace es llamar al comando cp («copiar»). Ya estamos saliendo de Node.js este comando debe ser soportada por el sistema.

    Sé que no es el más elegante, sino que hizo lo que yo necesitaba 🙂

    • esto está bien si usted no necesita el soporte de Windows
    • así que está bien siempre 😀
  4. 4

    importar el módulo y guardar en su paquete.archivo json

    npm install mv --save

    a continuación, utilizarlo como:

    var mv = require('mv');
    
    mv('source_file', 'destination_file', function (err) {
        if (err) {
            throw err;
        }
        console.log('file moved successfully');
    });
  5. 2

    Hice un Node.js módulo que sólo gestiona por usted. Usted no tiene que pensar si va a ser trasladado dentro de la misma partición o no. Es la solución más rápida disponible, como se utiliza el reciente fs.copyFile() Node.js API para copiar el archivo cuando la mudanza a otra partición o disco.

    Sólo tiene que instalar mover archivo:

    $ npm install move-file

    A continuación, utilizarlo como este:

    const moveFile = require('move-file');
    
    (async () => {
        await moveFile(fromPath, toPath);
        console.log('File moved');
    })();

Dejar respuesta

Please enter your comment!
Please enter your name here