nodo.js eliminar archivo


Respuestas:


805

Creo que quieres usar fs.unlink.

Más información sobre fsse puede encontrar aquí .


137
Creo que proviene del estándar POSIX. ¡Pero pensarías que podrían agregar un deletealias!
Nick

11
@Nick o un rmFilealias
PixnBits

99
@PixnBits o un rmalias si tienen rmdirmétodos
Robin

8
para el usuario de Meteor, es posible que desee utilizarfs.unlinkSync()
Erdal G.

3
Creo que debería proporcionar un ejemplo completo, los enlaces pueden cambiar.
vasilevich

223

Puede llamar fs.unlink(path, callback)para desvincular asíncrono (2) o fs.unlinkSync(path)desvincular síncrono (2).
¿Dónde pathestá la ruta del archivo que desea eliminar?

Por ejemplo, queremos eliminar el discovery.docxarchivo del c:/bookdirectorio. Entonces mi ruta de archivo es c:/book/discovery.docx. Entonces, el código para eliminar ese archivo será,

var fs = require('fs');
var filePath = 'c:/book/discovery.docx'; 
fs.unlinkSync(filePath);

64

Si desea verificar el archivo antes de eliminar si existe o no. Por lo tanto, use fs.stat o fs.statSync ( Synchronous ) en lugar de fs.exists. Porque de acuerdo con la última documentación de node.js , fs.existsahora en desuso .

Por ejemplo:-

 fs.stat('./server/upload/my.csv', function (err, stats) {
   console.log(stats);//here we got all information of file in stats variable

   if (err) {
       return console.error(err);
   }

   fs.unlink('./server/upload/my.csv',function(err){
        if(err) return console.log(err);
        console.log('file deleted successfully');
   });  
});

¿Qué pasa si verifico que existe, pero está bloqueado por otro proceso? ¿Cómo puedo bloquear directamente después de verificar? entonces no podría eliminar porque está bloqueado

44
Tenga en cuenta que fs.exists () está en desuso, pero fs.existsSync () no.
Tim

1
Hay una razón por la que está en desuso: a menudo crea una condición de carrera si verifica que existe un archivo antes de eliminarlo. En cambio, solo debe llamar fs.unlink, y si el archivo no existe, tendrá un ENOENTerror en la devolución de llamada. No es necesario verificar antes de intentar desvincular.
ZachB

@ZachB por qué la operación de eliminación se fs.unlinkrealiza cuando el archivo no existe, por lo que mi opinión es ese archivo de verificación antes de eliminarlo.
vineet

No debe verificar si existe si hay varios subprocesos o procesos que podrían estar usando o intentando eliminar el mismo archivo, en cuyo caso su verificación de que el archivo existe no será válida entre el momento en que verifica que existe y el momento intenta eliminarlo Simplemente verifique el código de error ENOENT en la unlinkdevolución de llamada. Si se produjo ese error, el archivo no existía. Mira la respuesta de Searene, por ejemplo.
ZachB

34

No creo que tenga que verificar si el archivo existe o no, fs.unlinklo verificará por usted.

fs.unlink('fileToBeRemoved', function(err) {
    if(err && err.code == 'ENOENT') {
        // file doens't exist
        console.info("File doesn't exist, won't remove it.");
    } else if (err) {
        // other errors, e.g. maybe we don't have enough permission
        console.error("Error occurred while trying to remove file");
    } else {
        console.info(`removed`);
    }
});

¿Cómo puedo obtener el nombre de la imagen anterior en nuestro controlador?
Chaudhary

26

Aquí hay un pequeño fragmento de lo que hice para este propósito,

var fs = require('fs');
var gutil = require('gulp-util');

fs.exists('./www/index.html', function(exists) {
  if(exists) {
    //Show in green
    console.log(gutil.colors.green('File exists. Deleting now ...'));
    fs.unlink('./www/index.html');
  } else {
    //Show in red
    console.log(gutil.colors.red('File not found, so not deleting.'));
  }
});


2
¿Qué sucede si otras personas eliminan el archivo después de verificarlo fs.existsy antes de eliminarlo fs.unlink? Podría ocurrir.
Searene

44
No debe verificar si existe un archivo antes de intentar desvincularlo. Simplemente llame unlink, y si no existe, maneje el ENOENTerror. De lo contrario, puede crear una condición de carrera.
ZachB

9

Como respuesta aceptada, úsela fs.unlinkpara eliminar archivos.

Pero de acuerdo con la documentación de Node.js

Se usa fs.stat()para verificar la existencia de un archivo antes de llamar fs.open(), fs.readFile()o fs.writeFile()no se recomienda. En cambio, el código de usuario debe abrir / leer / escribir el archivo directamente y manejar el error generado si el archivo no está disponible.

Para verificar si existe un archivo sin manipularlo después, fs.access()se recomienda.

para verificar si los archivos se pueden eliminar o no, use en su fs.accesslugar

fs.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK, (err) => {
  console.log(err ? 'no access!' : 'can read/write');
});

Esta es una buena respuesta, con una referencia de Node.js. la mayoría de las personas lo usarán unlinkdirectamente porque saben que tienen derechos para eliminar el archivo. Pero fs.accesses una buena alternativa si necesitan verificar antes de eliminar. Pero creo que si necesitan verificar si existe un archivo sin manipularlo después, deberían usarlo naturalmente fs.stat, fs.accesstiene un propósito diferente en mi humilde opinión.
vdegenne

la razón por la cual la documentación recomienda no verificar la existencia es porque esa información puede cambiar entre su llamada a fs.stat / fs.access y la operación real. Por ejemplo, el archivo puede existir cuando llama a fs.access y luego se elimina antes de llamar a fs.unlink, o los permisos pueden cambiar entre las dos llamadas. Dado que tiene que manejar los códigos de error de fs.unlink en ese caso, de todos modos no tiene sentido llamar a fs.stat o fs.access.
Jannis Froese

6

Aquí debajo mi código que funciona bien.

         const fs = require('fs');
         fs.unlink(__dirname+ '/test.txt', function (err) {            
              if (err) {                                                 
                  console.error(err);                                    
              }                                                          
             console.log('File has been Deleted');                           
          });                                                            

Me gusta más esta respuesta porque es la respuesta completa y correcta más simple para aquellos que desean saber cómo ejecutar algo después de que se completa el desvío y no les importa personalizar el mensaje de error.
Colin Keenan

¿Por qué estás usando __dirname? Me pregunto si podríamos colocar una ruta relativa en lugar de una ruta completa.
The Bumpaster

6

2019 y Node 10+ están aquí . Debajo de la versión usando dulce asíncrono / espera .

Ahora ya no es necesario envolverse fs.unlinken Promesas ni usar paquetes adicionales (como fs-extra).

Solo use la API nativa de Promesas fs .

const fs = require('fs').promises;

(async () => {
  try {
    await fs.unlink('~/any/file');
  } catch (e) {
    // file doesn't exist, no permissions, etc..
    // full list of possible errors is here 
    // http://man7.org/linux/man-pages/man2/unlink.2.html#ERRORS
    console.log(e);
  }
})();

Aquí hay fsPromises.unlink especificaciones de Node docs.

También tenga en cuenta que fs.promises API marcado como experimental en el Nodo 10.xx (aunque funciona totalmente bien, sin embargo), y ya no es experimental desde entonces 11.14.0.


3

puede usar del module para eliminar uno o más archivos en el directorio actual. Lo bueno de esto es que lo protege contra la eliminación del directorio de trabajo actual y superior.

const del = require('del');
del(['<your pathere here>/*']).then( (paths: any) => {
   console.log('Deleted files and folders:\n', paths.join('\n'));
});

Si necesita eliminar varios archivos, ¡esta es una excelente opción! Gracias por la sugerencia.
Samuel Earl

2

Puede usar la función fs.unlink (ruta, devolución de llamada) . Aquí hay un ejemplo del contenedor de funciones con el patrón "error-back":

// Dependencies.
const fs = require('fs');

// Delete a file.
const deleteFile = (filePath, callback) => {
  // Unlink the file.
  fs.unlink(filePath, (error) => {
    if (!error) {
      callback(false);
    } else {
      callback('Error deleting the file');
    }
  })
};


2

Elimine archivos del directorio que coincide con regexp para nombre de archivo. Usado solo fs.unlink - para eliminar el archivo, fs.readdir - para obtener todos los archivos de un directorio

var fs = require('fs');
const path = '/path_to_files/filename.anyextension'; 

const removeFile = (fileName) => {
    fs.unlink(`${path}${fileName}`, function(error) {
        if (error) {
            throw error;
        }
        console.log('Deleted filename', fileName);
    })
}

const reg = /^[a-zA-Z]+_[0-9]+(\s[2-4])+\./

fs.readdir(path, function(err, items) {
    for (var i=0; i<items.length; i++) {
        console.log(items[i], ' ', reg.test(items[i]))
        if (reg.test(items[i])) {
           console.log(items[i])
           removeFile(items[i]) 
        }
    }
});

2

Es muy fácil con fs.

var fs = require('fs');
try{
 var sourceUrls = "/sampleFolder/sampleFile.txt";
 fs.unlinkSync(sourceUrls);
}catch(err){
 console.log(err);
}



-1

Aquí el código donde puede eliminar el archivo / imagen de la carpeta.

var fs = require('fs'); 
Gallery.findById({ _id: req.params.id},function(err,data){ 
    if (err) throw err;
    fs.unlink('public/gallery/'+data.image_name);
 });

Desde el nodo 7, el argumento de devolución de llamada ya no es opcional y dará como resultado una advertencia. Pase una función vacía si realmente no le importa.
jlh
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.