簡體   English   中英

node.js 刪除文件

[英]node.js remove file

如何刪除帶有 node.js 的文件?

http://nodejs.org/api/fs.html#fs_fs_rename_oldpath_newpath_callback

我沒有看到刪除命令?

我想你想使用fs.unlink

更多關於fs的信息可以在這里找到。

您可以為異步 unlink(2) 調用fs.unlink(path, callback)或為同步 unlink(2) 調用 fs.unlinkSync( fs.unlinkSync(path) )。
其中path是您要刪除的文件路徑。

例如,我們想從c:/book目錄中刪除discovery.docx文件。 所以我的文件路徑是c:/book/discovery.docx 所以刪除該文件的代碼將是,

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

如果要在刪除之前檢查文件是否存在。 因此,請使用fs.statfs.statSync ( Synchronous ) 而不是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');
   });  
});

我認為您不必檢查文件是否存在, 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`);
    }
});

這是我為此目的制作的一小段,

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

2019 和 Node 10+ 就在這里 下面的版本使用sweet async/await方式。

現在無需將fs.unlink包裝到 Promises 中,也無需再使用其他包(如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);
  }
})();

這是來自 Node 文檔的fsPromises.unlink規范。

另請注意,fs.promises API 在 Node 10.xx 中標記為實驗性的(但工作完全正常),並且自11.14.0起不再是實驗性的。

2020答案

隨着 node v14.14.0的發布,您現在可以這樣做了。

fs.rmSync("path/to/file", {
    force: true,
});

https://nodejs.org/api/fs.html#fsrmsyncpath-options

作為接受的答案,使用fs.unlink刪除文件。

但根據Node.js 文檔

不建議在調用fs.open()fs.readFile()fs.writeFile()之前使用fs.stat()檢查文件是否存在。 相反,用戶代碼應該直接打開/讀取/寫入文件並處理文件不可用時引發的錯誤。

要檢查文件是否存在而不隨后對其進行操作,建議使用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');
});

下面是我的代碼,它工作正常。

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

簡單和同步

if (fs.existsSync(pathToFile)) {
  fs.unlinkSync(pathToFile)
}

您可以執行以下操作

const deleteFile = './docs/deleteme.txt'
if (fs.existsSync(deleteFile)) {
    fs.unlink(deleteFile, (err) => {
        if (err) {
            console.log(err);
        }
        console.log('deleted');
    })
}
  • fs.unlinkSync()如果你想同步刪除文件並且
  • fs.unlink()如果你想異步刪除它。

在這里你可以找到一篇好文章。

只需rm -rf

require("fs").rmSync(file_or_directory_path_existing_or_not, {recursive: true, force: true});
// Added in Node.js 14.14.0.

使用require("fs").rmSyncrequire("fs").rm

您可以使用del模塊刪除當前目錄中的一個或多個文件。 它的好處是可以保護您不刪除當前工作目錄及以上目錄。

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

您可以使用fs.unlink(path, callback)函數。 下面是一個帶有“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'); } }) };

從與文件名的正則表達式匹配的目錄中刪除文件。 僅使用 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]) 
        }
    }
});

使用 fs 非常容易。

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

2022答案

永遠不要在 Nodejs 中進行任何同步操作

要異步刪除文件,

const { unlink } = require('fs/promises');
(async function(path) {
  try {
    await unlink(path);
    console.log(`successfully deleted ${path}`);
  } catch (error) {
    console.error('there was an error:', error.message);
}
})('/tmp/hello');

參考: https ://nodejs.org/api/fs.html#promise-example

建議在使用accessstat刪除之前檢查文件是否存在

import { access, constants } from 'fs';

const file = 'package.json';

// Check if the file exists in the current directory.
access(file, constants.F_OK, (err) => {
  console.log(`${file} ${err ? 'does not exist' : 'exists'}`);
});

參考: https ://nodejs.org/api/fs.html#fsaccesspath-mode-callback

fs-extra提供了一個 remove 方法:

const fs = require('fs-extra')

fs.remove('/tmp/myfile')
.then(() => {
  console.log('success!')
})
.catch(err => {
  console.error(err)
})

https://github.com/jprichardson/node-fs-extra/blob/master/docs/remove.md

您可以使用以下代碼。 我認為它有效。

const fs = require('fs');
fs.unlink('./uploads/file.png', function (err) {            
    if (err) {                                                 
        console.error(err);
        console.log('File not found');                                    
    }else{
        console.log('File Delete Successfuly');      
    }                                                                      
});

使用NPM 模塊 fs-extra ,它為您提供 fs 中的所有內容,並且所有內容都是 Promisified。 作為獎勵,有一個fs.remove() 方法可用。

這是您可以從文件夾中刪除文件/圖像的代碼。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM