2015-07-02 21 views
5

Tôi muốn tạo một tệp foobar. Tuy nhiên, nếu người dùng đã có một tệp có tên là foobar thì tôi không muốn ghi đè lên tệp của họ. Vì vậy, tôi chỉ muốn tạo foobar nếu nó chưa tồn tại.Tạo một tệp nếu nó chưa tồn tại

Lúc đầu, tôi nghĩ rằng tôi nên làm điều này:

fs.exists(filename, function(exists) { 
    if(exists) { 
    // Create file 
    } 
    else { 
    console.log("Refusing to overwrite existing", filename); 
    } 
}); 

Tuy nhiên, nhìn vào official documentation cho fs.exists, nó đọc:

fs.exists() là lỗi thời và tồn tại chỉ vì lý do lịch sử. Hầu như không bao giờ có lý do để sử dụng nó trong mã của riêng bạn.

Đặc biệt, kiểm tra nếu tập tin tồn tại trước khi mở nó là một mô hình chống khiến bạn dễ bị tổn thương để đua điều kiện: một quá trình có thể loại bỏ các tập tin giữa các cuộc gọi đến fs.exists() và fs.open(). Chỉ cần mở tệp và xử lý lỗi khi không phải là ở đó.

fs.exists() sẽ không còn được dùng nữa.

Rõ ràng các nhà phát triển nút nghĩ rằng phương pháp của tôi là một ý tưởng tồi. Ngoài ra, tôi không muốn sử dụng chức năng sẽ không được dùng nữa.

Tôi làm cách nào để tạo tệp mà không cần ghi lên tệp hiện có?

+1

nó cho bạn biết: mở tệp và xử lý lỗi (hoặc thiếu) – dandavis

Trả lời

11

Tôi nghĩ rằng câu trả lời là:

Chỉ cần mở tập tin và xử lý các lỗi khi nó không có ở đó.

Hãy thử một cái gì đó như:

function createFile(filename) { 
    fs.open(filename,'r',function(err, fd){ 
    if (err) { 
     fs.writeFile(filename, '', function(err) { 
      if(err) { 
       console.log(err); 
      } 
      console.log("The file was saved!"); 
     }); 
    } else { 
     console.log("The file exists!"); 
    } 
    }); 
} 
0

Nếu bạn muốn ghi dữ liệu vào tập tin này sau đó, bạn có thể sử dụng fs.appendFile('message.txt', 'data to append', 'utf8', callback);.

Không đồng bộ nối dữ liệu vào tệp, tạo tệp nếu chưa tồn tại. Dữ liệu có thể là một chuỗi hoặc một bộ đệm.

Node file system documentation.

5
fs.closeSync(fs.openSync('/var/log/my.log', 'a')) 
Các vấn đề liên quan