node.jsファイルを削除


回答:


804

使いたいと思いますfs.unlink。

詳細情報をfs見つけることができるここに。


137
私はそれがPOSIX標準から来ていると思います。しかし、あなたは彼らがdeleteエイリアスを追加できると思います!
— Nick

11
@NickまたはrmFileエイリアス
— PixnBits 2015年

9
@PixnBitsまたはメソッドがあるrm場合はエイリアスrmdir
— Robin

8
Meteorユーザーの場合、使用することができますfs.unlinkSync()
— Erdal G.

3
例全体を提供する必要があると思います。リンクは変更される可能性があります。
— vasilevich

223

fs.unlink(path, callback)非同期unlink(2)またはfs.unlinkSync(path)同期unlink(2)を呼び出すことができます。削除するファイルパスは
どこにpathありますか。

たとえばdiscovery.docx、c:/bookディレクトリからファイルを削除したいとします。だから私のファイルパスはc:/book/discovery.docxです。したがって、そのファイルを削除するためのコードは、

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

64

削除する前にファイルが存在するかどうかを確認する場合。したがって、の代わりにfs.statまたはfs.statSync(同期)を使用してくださいfs.exists。最新のnode.js ドキュメントによると、fs.exists現在は非推奨。

例えば:-

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

それが存在することを確認したが、別のプロセスによってブロックされている場合-または、それが存在していることを確認して問題がない場合、削除する前に別のプロセスがランダムにブロックします。チェックしたらすぐにブロックするにはどうすればよいですか?その後、ブロックされているため削除できません

4
fs.exists()は非推奨ですが、fs.existsSync()は非推奨です。
— Tim

1
廃止される理由があります。削除する前にファイルが存在することを確認すると、競合状態が発生することがよくあります。代わりに、のみを呼び出す必要があります。fs.unlinkファイルが存在しない場合ENOENTは、コールバックでエラーが発生します。リンクを解除する前に確認する必要はありません。
— ZachB 2017

@ZachBなぜfs.unlinkファイルが存在しないときに削除操作が実行されるのか、私のビューは削除する前にファイルをチェックすることです。
— vineet

同じファイルを使用または削除しようとしている可能性のあるスレッドまたはプロセスが複数ある場合は、その存在を確認しないでください。あなたはそれを削除しようとします。unlinkコールバックでENOENTエラーコードを確認してください。そのエラーが発生した場合、ファイルは存在しませんでした。たとえば、シーリーンの答えを見てください。
— ZachB 2017

34

ファイルが存在するかどうかを確認する必要はないと思いfs.unlinkます。確認します。

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

コントローラで以前のイメージ名を取得するにはどうすればよいですか?
— Chaudharyさん

26

これは、この目的のために作成した小さなスニペットです。

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
非同期の存在は非推奨ですnodejs.org/api/fs.html#fs_fs_exists_path_callback
— Mirodinho

2
チェックした後、で削除するfs.exists前に、ファイルが他のユーザーによって削除された場合はどうなりますfs.unlinkか?それは起こり得る。
— Searene 2017

4
リンクを解除する前に、ファイルが存在するかどうかを確認しないでください。を呼び出すだけでunlink、存在しない場合はENOENTエラーを処理します。それ以外の場合は、競合状態を作成できます。
— ZachB 2017

9

受け入れられた答えとして、を使用fs.unlinkしてファイルを削除します。

しかし、Node.jsのドキュメントによると

使用してfs.stat()呼び出す前に、ファイルの存在を確認するためにfs.open()、fs.readFile()またはfs.writeFile()推奨されません。代わりに、ユーザーコードはファイルを直接開いたり、読み込んだり、書き込んだりして、ファイルが利用できない場合に発生するエラーを処理する必要があります。

後で操作せずにファイルが存在するかどうかを確認することをfs.access()お勧めします。

ファイルが削除されたかどうかを確認するには、fs.access代わりに使用します

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

これは、Node.jsリファレンスを使用するのに適した答えです。ほとんどの人はunlink、ファイルを削除する権限があることを知っているため、直接使用します。ただしfs.access、削除する前に確認する必要がある場合は、この方法が適しています。しかし、後でファイルを操作せずにファイルが存在するかどうかを確認する必要がある場合、自然にを使用する必要がありますが、私の考えfs.statでfs.accessは別の目的があります。
— vdegenne

ドキュメントが存在の確認を推奨しない理由は、fs.stat / fs.accessの呼び出しと実際の操作の間で情報が変わる可能性があるためです。たとえば、fs.accessを呼び出すときにファイルが存在し、fs.unlinkを呼び出す前にファイルが削除されるか、2つの呼び出し間で権限が変更される可能性があります。その場合、fs.unlinkのエラーコードを処理する必要があるため、とにかくfs.statまたはfs.accessを呼び出しても意味がありません。
— Jannis Froese

6

以下は、正常に機能する私のコードです。

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

リンク解除の完了後に何かを実行する方法を知り、エラーメッセージのカスタマイズに関心がない人にとっては、これが最も単純で完全な正しい回答であるため、私はこの回答が一番好きです。
— コリンキーナン

なぜ__dirnameを使用しているのですか?フルパスではなく相対パスを配置できるのでしょうか?
— Bumpaster

6

2019とNode 10+はこちらです。バージョンの下で、甘い非同期/待機方法を使用しています。

これで、Promiseにラップfs.unlinkしたり、(などfs-extra)追加のパッケージを使用したりする必要がなくなりました。

ネイティブの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);
  }
})();

以下は fsPromises.unlink Node docsからの仕様です。

また、fs.promises APIはNode 10.xxで試験的としてマークされています(ただし、完全に正常に動作します)11.14.0。


3

delモジュールを使用して、現在のディレクトリから1つ以上のファイルを削除できます。現在の作業ディレクトリ以上が削除されないように保護されているのが良い点です。

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

複数のファイルを削除する必要がある場合、これは素晴らしいオプションです!提案ありがとうございます。
— サミュエルアール

2

fs.unlink(path、callback)関数を使用できます。「エラーバック」パターンを使用した関数ラッパーの例を次に示します。

// 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

ファイル名の正規表現に一致したディレクトリからファイルを削除します。fs.unlinkのみを使用-ファイルを削除する、fs.readdir-ディレクトリからすべてのファイルを取得する

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

fsを使用すると、非常に簡単です。

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



-1

ここで、フォルダーからファイル/画像を削除できるコードを示します。

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

ノード7以降、コールバック引数はオプションではなくなり、警告が表示されます。本当に気にしない場合は、空の関数を渡します。
— jlh 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.