2011-12-13 29 views
10

Tôi đang sử dụng fs.unlink() để xóa một tập tin và tôi nhận được lỗi sau:Node.js fs.unlink gây EPERM lỗi

uncaught undefined: 

Error: EPERM, Operation not permitted '/Path/To/File' 

Bất cứ ai biết một lý do tại sao điều này xảy ra?

+0

Kiểm tra thông báo lỗi của bạn?! Hãy thử làm tương tự với người dùng chạy quá trình. (ví dụ: /> hủy liên kết/đường dẫn/Tới/tệp) – malletjo

Trả lời

0

Có, bạn không có quyền xóa/hủy liên kết tệp đó. Hãy thử lại với nhiều quyền hơn hoặc xác minh rằng bạn đang cho nó đường dẫn đúng.

22

Bạn không thể xóa thư mục không trống. Và fs.unlinkSync() được sử dụng để xóa tệp không phải thư mục.

Để xóa một thư mục trống, sử dụng fs.rmdir()

để xóa một thư mục không rỗng, sử dụng đoạn mã này:

var deleteFolderRecursive = function(path) { 
    if(fs.existsSync(path)) { 
     fs.readdirSync(path).forEach(function(file) { 
     var curPath = path + "/" + file; 
      if(fs.statSync(curPath).isDirectory()) { // recurse 
       deleteFolderRecursive(curPath); 
      } else { // delete file 
       fs.unlinkSync(curPath); 
      } 
     }); 
     fs.rmdirSync(path); 
    } 
}; 

Snippet từ stackoverflow: Is node.js rmdir recursive ? Will it work on non empty directories?

+0

Có lỗi tương tự bằng cách cập nhật mô-đun npm trong khi ứng dụng đang sử dụng nó! Cảm ơn. – Vadorequest

+0

Đoạn mã này KHÔNG được sử dụng trong bất kỳ mã nào xử lý yêu cầu của khách hàng vì nó thực hiện IO đồng bộ và sẽ khóa toàn bộ ứng dụng của bạn trong khi xóa một cây thư mục có khả năng lớn. – selfawaresoup

+0

@lnwdr Có đoạn mã này là xấu cho các thư mục lớn trong một yêu cầu khách hàng. Nhưng điều này là không thể sử dụng cho cây thư mục tương đối nhỏ. Bạn có thể cung cấp bất kỳ giải pháp nào để xóa cây thư mục đến từ yêu cầu của khách hàng không? Điều đó sẽ được đánh giá cao. Cảm ơn – Raghavendra

6

Nếu bạn muốn đạt được một cái gì đó như rm-rf, có một gói từ npm được gọi là rimraf mà làm cho nó rất dễ dàng.

1

Có thể số Đường dẫn của tệp nằm sai.

nếu không, hãy thử với fs.unlinkSync()