2011-03-15 17 views

Respuesta

547

Creo que desea utilizar fs.unlink.

Más información sobre fs se puede encontrar here.

+86

Creo que viene del estándar POSIX. ¡Pero pensarías que podrían agregar un alias 'delete'! – Nick

+23

De acuerdo, pero para obtener más información http://en.wikipedia.org/wiki/Unlink_(Unix) – i3enhamin

+6

@Nick o un alias 'rmFile' – PixnBits

138

Puede llamar al fs.unlink(path, callback) para desvincular asincrónicamente (2) o fs.unlinkSync(path) para desvincularse sincrónicamente (2).
Donde path es la ruta de archivo que desea eliminar.

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

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

Aquí es un pequeño fragmento de 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.')); 
    } 
}); 
+4

Async existe está en desuso https://nodejs.org/api/fs.html#fs_fs_exists_path_callback – Mirodinho

+1

¿Qué sucede si el archivo es eliminado por otros después de comprobar con 'fs.exists' y antes de eliminarlo con' fs.unlink'? Podría ocurrir. – Searene

+2

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

43

Si desea comprobar archivo antes de eliminar si existe o no. Por lo tanto, use fs.stat o fs.statSync (Sincrónico) en lugar de fs.exists. Porque de acuerdo con el último node.js documentation, fs.exists ahora obsoleto.

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'); 
    }); 
}); 
+0

¿Qué sucede si compruebo que existe, pero está bloqueado por otro proceso, o bien, compruebo que existe, y está bien, pero luego otro proceso lo bloquea al azar antes de que pueda eliminarlo. ¿Cómo puedo bloquear directamente después de verificar? entonces no podría borrar como está bloqueado –

+0

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

+0

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

-2

Aquí el código donde se 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); 
}); 
+0

Desde el nodo 7, el argumento de devolución de llamada ya no es opcional y dará como resultado una advertencia. Pasar una función vacía si realmente no te importa. – jlh

11

creo que no tiene que comprobar si existe el archivo o no, fs.unlink a comprobar que 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`); 
    } 
}); 
+0

¿cómo puedo obtener el nombre de la imagen anterior en Nuestro controlador? – Chaudhary

+0

Gracias Searene, esto funcionó para mi situación. – user752746

3

Como la respuesta aceptada, utilice fs.unlink para eliminar archivos.

Pero de acuerdo con Node.js documentation

Usando fs.stat() para comprobar la existencia de un archivo antes de llamar fs.open(), fs.readFile() o fs.writeFile() no es recomendable. En cambio, el código de usuario debe abrir/leer/escribir el archivo directamente y manejar el error que se genera si el archivo no está disponible.

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

para comprobar archivos pueden ser borrados o no, el uso fs.access lugar

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

puede utilizar del módulo 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 más.

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