node.js usuń plik

Odpowiedzi:

804

Myślę, że chcesz użyć fs.unlink.

Więcej informacji na temat fsmożna znaleźć tutaj .

Nacięcie
źródło
137
Wierzę, że pochodzi ze standardu POSIX. Ale można by pomyśleć, że mogą dodać deletealias!
Nick
11
@Nick or rmFilealias
PixnBits
9
@PixnBits lub rmalias, jeśli mają rmdirmetody
Robin
8
dla użytkownika Meteor możesz użyćfs.unlinkSync()
Erdal G.
3
Myślę, że powinieneś podać cały przykład, linki mogą się zmienić.
wasilevich
222

Możesz wywołać fs.unlink(path, callback)Asynchroniczne rozłączenie (2) lub fs.unlinkSync(path)Synchroniczne rozłączenie (2).
Gdzie pathjest ścieżka do pliku, którą chcesz usunąć.

Na przykład chcemy usunąć discovery.docxplik z c:/bookkatalogu. Więc moja ścieżka do pliku to c:/book/discovery.docx. Kod do usunięcia tego pliku będzie:

var fs = require('fs');
var filePath = 'c:/book/discovery.docx'; 
fs.unlinkSync(filePath);
kod źródłowy
źródło
64

Jeśli chcesz sprawdzić plik przed usunięciem, czy istnieje, czy nie. Tak więc zamiast fs.stat lub fs.statSync ( synchroniczny ) fs.exists. Ponieważ zgodnie z najnowszą dokumentacją node.js , fs.existsteraz przestarzała .

Na przykład:-

 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');
   });  
});
winorośl
źródło
Co jeśli sprawdzę, czy istnieje, ale jest zablokowany przez inny proces - lub sprawdzam, czy istnieje i jest w porządku, ale potem inny proces losowo blokuje go, zanim będę mógł go usunąć. Jak mogę zablokować bezpośrednio po sprawdzeniu? wtedy nie byłbym w stanie usunąć, ponieważ jest zablokowany
4
Zauważ, że fs.exists () jest przestarzała, ale fs.existsSync () nie jest.
Tim
1
Jest powód, dla którego jest przestarzały: często tworzysz stan wyścigu, jeśli sprawdzisz, czy plik istnieje przed jego usunięciem. Zamiast tego powinieneś tylko zadzwonić fs.unlink, a jeśli plik nie istnieje, wystąpi ENOENTbłąd w wywołaniu zwrotnym. Nie musisz sprawdzać przed próbą rozłączenia.
ZachB
@ZachB dlaczego operacja usuwania fs.unlinkwykonuje się, gdy plik nie istnieje, więc moim zdaniem jest to sprawdzenie pliku przed usunięciem.
Vineet 25.07.17
Nie należy sprawdzać, czy istnieje, jeśli istnieje wiele wątków lub procesów, które mogą wykorzystywać lub próbować usunąć ten sam plik. W takim przypadku sprawdzenie, czy plik istnieje, stanie się nieważne od momentu sprawdzenia, czy plik istnieje próbujesz go usunąć. Po prostu sprawdź kod błędu ENOENT w unlinkwywołaniu zwrotnym. Jeśli ten błąd wystąpił, plik nie istniał. Spójrz na przykład na odpowiedź Searene.
ZachB
34

Nie sądzę, że musisz sprawdzić, czy plik istnieje, czy nie, fs.unlinksprawdzi go za Ciebie.

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`);
    }
});
Searene
źródło
jak mogę uzyskać poprzednią nazwę obrazu w naszym kontrolerze?
Chaudhary,
26

Oto mały fragment, który zrobiłem w tym celu,

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.'));
  }
});
Nieznajomy
źródło
4
Async istnieje jest przestarzały nodejs.org/api/fs.html#fs_fs_exists_path_callback
Mirodinho
2
Co się stanie, jeśli plik zostanie usunięty przez innych po sprawdzeniu za pomocą fs.existsi przed usunięciem za pomocą fs.unlink? To może się zdarzyć.
Searene
4
Nie powinieneś sprawdzać, czy plik istnieje, zanim spróbujesz go odłączyć. Wystarczy zadzwonić unlink, a jeśli nie istnieje, obsłużyć ENOENTbłąd. W przeciwnym razie możesz stworzyć warunki wyścigu.
ZachB
9

Jako zaakceptowaną odpowiedź użyj fs.unlinkdo usunięcia plików.

Ale zgodnie z dokumentacją Node.js

Korzystanie fs.stat()celu sprawdzenia istnienia pliku przed wywołaniem fs.open(), fs.readFile()czy fs.writeFile()nie jest to zalecane. Zamiast tego kod użytkownika powinien otwierać / odczytywać / zapisywać plik bezpośrednio i obsługiwać zgłoszony błąd, jeśli plik nie jest dostępny.

fs.access()Zalecane jest sprawdzenie, czy plik istnieje bez późniejszego manipulowania nim .

aby sprawdzić, czy pliki można usunąć, czy nie, użyj fs.accessZamiast tego

fs.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK, (err) => {
  console.log(err ? 'no access!' : 'can read/write');
});
jasperjian
źródło
To dobra odpowiedź z odniesieniem do Node.js. większość osób korzysta unlinkbezpośrednio, ponieważ wiedzą, że mają prawa do usunięcia pliku. Ale fs.accessjest dobrą alternatywą, jeśli trzeba sprawdzić przed usunięciem. Ale myślę, że jeśli muszą sprawdzić, czy plik istnieje bez późniejszego manipulowania nim, powinni naturalnie użyć fs.stat, fs.accessma inny cel, moim skromnym zdaniem.
vdegenne,
powodem, dla którego dokumentacja odradza sprawdzanie istnienia, jest to, że informacje te mogą się zmieniać między twoim wywołaniem fs.stat / fs.access a faktyczną operacją. Na przykład plik może istnieć podczas wywoływania fs.access, a następnie zostać usunięty przed wywołaniem fs.unlink, lub uprawnienia mogą się zmieniać między tymi dwoma wywołaniami. Ponieważ w takim przypadku musisz obsługiwać kody błędów fs.unlink, nie ma sensu wywoływać fs.stat lub fs.access.
Jannis Froese
6

Tutaj poniżej mój kod, który działa dobrze.

         const fs = require('fs');
         fs.unlink(__dirname+ '/test.txt', function (err) {            
              if (err) {                                                 
                  console.error(err);                                    
              }                                                          
             console.log('File has been Deleted');                           
          });                                                            
Thavaprakash Swaminathan
źródło
Najbardziej podoba mi się ta odpowiedź, ponieważ jest to najprostsza pełna i poprawna odpowiedź dla tych, którzy chcą wiedzieć, jak uruchomić coś po zakończeniu rozłączania i nie dbają o dostosowanie komunikatu o błędzie.
Colin Keenan,
dlaczego używasz __dirname? Zastanawiam się, czy moglibyśmy umieścić ścieżkę względną zamiast pełnej?
The Bumpaster,
6

2019 i Node 10+ jest tutaj . Poniżej wersji używającej słodkiej asynchronizacji / oczekuj na sposób.

Teraz nie trzeba już owijać fs.unlinkw Obietnice ani używać dodatkowych pakietów (takich jak fs-extra).

Wystarczy użyć natywnego fs Promises API .

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);
  }
})();

Oto fsPromises.unlink specyfikacja z dokumentów Node.

Należy również pamiętać, że interfejs API fs.promises oznaczony jako eksperymentalny w węźle 10.xx (choć działa całkowicie dobrze) i od tego czasu nie jest już eksperymentalny 11.14.0.

Artem Pranowicz
źródło
3

możesz użyć modułu del , aby usunąć jeden lub więcej plików z bieżącego katalogu. to, co jest miłe w tym, że chroni cię przed usunięciem bieżącego katalogu roboczego i wyżej.

const del = require('del');
del(['<your pathere here>/*']).then( (paths: any) => {
   console.log('Deleted files and folders:\n', paths.join('\n'));
});
Amazja
źródło
Jeśli chcesz usunąć wiele plików, jest to świetna opcja! Dziękuję za sugestię.
Samuel Earl
2

Możesz użyć funkcji fs.unlink (ścieżka, wywołanie zwrotne) . Oto przykład opakowania funkcji ze wzorem „powrót po błędzie”:

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

Oleksii Trekhleb
źródło
2

Usuń pliki z katalogu, który pasował do wyrażenia regularnego dla nazwy pliku. Używany tylko fs.unlink - do usunięcia pliku, fs.readdir - do pobrania wszystkich plików z katalogu

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]) 
        }
    }
});
Xenia Lvova
źródło
2

Z fs jest to bardzo łatwe.

var fs = require('fs');
try{
 var sourceUrls = "/sampleFolder/sampleFile.txt";
 fs.unlinkSync(sourceUrls);
}catch(err){
 console.log(err);
}
Susampath
źródło
-1

Tutaj kod, w którym możesz usunąć plik / obraz z folderu.

var fs = require('fs'); 
Gallery.findById({ _id: req.params.id},function(err,data){ 
    if (err) throw err;
    fs.unlink('public/gallery/'+data.image_name);
 });
Mahesh singh chouhan
źródło
Od węzła 7 argument wywołania zwrotnego nie jest już opcjonalny i spowoduje wyświetlenie ostrzeżenia. Przekaż pustą funkcję, jeśli naprawdę Cię to nie obchodzi.
jlh