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);
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 variableif(err){return console.error(err);}
fs.unlink('./server/upload/my.csv',function(err){if(err)return console.log(err);
console.log('file deleted successfully');});});
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.");}elseif(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`);}});
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.'));}});
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.
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
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');});
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).
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);}})();
OtofsPromises.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.
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'));});
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
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.
delete
alias!rmFile
aliasrm
alias, jeśli mająrmdir
metodyfs.unlinkSync()
Możesz wywołać
fs.unlink(path, callback)
Asynchroniczne rozłączenie (2) lubfs.unlinkSync(path)
Synchroniczne rozłączenie (2).Gdzie
path
jest ścieżka do pliku, którą chcesz usunąć.Na przykład chcemy usunąć
discovery.docx
plik zc:/book
katalogu. Więc moja ścieżka do pliku toc:/book/discovery.docx
. Kod do usunięcia tego pliku będzie:źródło
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.exists
teraz przestarzała .Na przykład:-
źródło
fs.unlink
, a jeśli plik nie istnieje, wystąpiENOENT
błąd w wywołaniu zwrotnym. Nie musisz sprawdzać przed próbą rozłączenia.fs.unlink
wykonuje się, gdy plik nie istnieje, więc moim zdaniem jest to sprawdzenie pliku przed usunięciem.unlink
wywołaniu zwrotnym. Jeśli ten błąd wystąpił, plik nie istniał. Spójrz na przykład na odpowiedź Searene.Nie sądzę, że musisz sprawdzić, czy plik istnieje, czy nie,
fs.unlink
sprawdzi go za Ciebie.źródło
Oto mały fragment, który zrobiłem w tym celu,
źródło
fs.exists
i przed usunięciem za pomocąfs.unlink
? To może się zdarzyć.unlink
, a jeśli nie istnieje, obsłużyćENOENT
błąd. W przeciwnym razie możesz stworzyć warunki wyścigu.Jako zaakceptowaną odpowiedź użyj
fs.unlink
do usunięcia plików.Ale zgodnie z dokumentacją Node.js
aby sprawdzić, czy pliki można usunąć, czy nie, użyj
fs.access
Zamiast tegoźródło
unlink
bezpośrednio, ponieważ wiedzą, że mają prawa do usunięcia pliku. Alefs.access
jest 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.access
ma inny cel, moim skromnym zdaniem.Tutaj poniżej mój kod, który działa dobrze.
źródło
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.unlink
w Obietnice ani używać dodatkowych pakietów (takich jakfs-extra
).Wystarczy użyć natywnego fs Promises API .
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
.źródło
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.
źródło
Możesz użyć funkcji fs.unlink (ścieżka, wywołanie zwrotne) . Oto przykład opakowania funkcji ze wzorem „powrót po błędzie”:
źródło
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
źródło
Z fs jest to bardzo łatwe.
źródło
fs-extra
zapewnia metodę usuwania:https://github.com/jprichardson/node-fs-extra/blob/master/docs/remove.md
źródło
Użyj modułu NPM fs-extra , który daje ci wszystko w fs, a także wszystko jest Promisified. Jako bonus dostępna jest metoda fs.remove () .
źródło
Tutaj kod, w którym możesz usunąć plik / obraz z folderu.
źródło