Hướng dẫn nodejs append to file - nodejs thêm vào tệp

Khi bạn muốn ghi trong một tệp nhật ký, tức là nối thêm dữ liệu vào cuối tệp, không bao giờ sử dụng

{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
    at Error (native)
  errno: -4066,
  code: 'EMFILE',
  syscall: 'open',
  path: 'C:\\mypath\\append.txt' }
2.
{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
    at Error (native)
  errno: -4066,
  code: 'EMFILE',
  syscall: 'open',
  path: 'C:\\mypath\\append.txt' }
2 Mở một xử lý tệp cho mỗi phần dữ liệu bạn thêm vào tệp của mình, sau một thời gian, bạn gặp lỗi
{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
    at Error (native)
  errno: -4066,
  code: 'EMFILE',
  syscall: 'open',
  path: 'C:\\mypath\\append.txt' }
4 đẹp.never use
{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
    at Error (native)
  errno: -4066,
  code: 'EMFILE',
  syscall: 'open',
  path: 'C:\\mypath\\append.txt' }
2.
{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
    at Error (native)
  errno: -4066,
  code: 'EMFILE',
  syscall: 'open',
  path: 'C:\\mypath\\append.txt' }
2 opens a file handle for each piece of data you add to your file, after a while you get a beautiful
{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
    at Error (native)
  errno: -4066,
  code: 'EMFILE',
  syscall: 'open',
  path: 'C:\\mypath\\append.txt' }
4 error.

Tôi có thể thêm rằng

{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
    at Error (native)
  errno: -4066,
  code: 'EMFILE',
  syscall: 'open',
  path: 'C:\\mypath\\append.txt' }
2 không dễ sử dụng hơn
{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
    at Error (native)
  errno: -4066,
  code: 'EMFILE',
  syscall: 'open',
  path: 'C:\\mypath\\append.txt' }
6.

Ví dụ với

{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
    at Error (native)
  errno: -4066,
  code: 'EMFILE',
  syscall: 'open',
  path: 'C:\\mypath\\append.txt' }
2:

console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
    fs.appendFile("append.txt", index+ "\n", function (err) {
        if (err) console.log(err);
    });
});
console.log(new Date().toISOString());

Lên đến 8000 trên máy tính của tôi, bạn có thể nối dữ liệu vào tệp, sau đó bạn có được điều này:

{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
    at Error (native)
  errno: -4066,
  code: 'EMFILE',
  syscall: 'open',
  path: 'C:\\mypath\\append.txt' }

Hơn nữa,

{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
    at Error (native)
  errno: -4066,
  code: 'EMFILE',
  syscall: 'open',
  path: 'C:\\mypath\\append.txt' }
2 sẽ viết khi nó được bật, vì vậy nhật ký của bạn sẽ không được viết bằng dấu thời gian. Bạn có thể kiểm tra với ví dụ, đặt 1000 thay cho 100000, thứ tự sẽ là ngẫu nhiên, phụ thuộc vào quyền truy cập vào tệp.

Nếu bạn muốn nối vào một tệp, bạn phải sử dụng một luồng có thể ghi như thế này:must use a writable stream like this:

var stream = fs.createWriteStream("append.txt", {flags:'a'});
console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
    stream.write(index + "\n");
});
console.log(new Date().toISOString());
stream.end();

Bạn kết thúc nó khi bạn muốn. Bạn thậm chí không bắt buộc phải sử dụng

{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
    at Error (native)
  errno: -4066,
  code: 'EMFILE',
  syscall: 'open',
  path: 'C:\\mypath\\append.txt' }
9, tùy chọn mặc định là
var stream = fs.createWriteStream("append.txt", {flags:'a'});
console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
    stream.write(index + "\n");
});
console.log(new Date().toISOString());
stream.end();
0, vì vậy tệp của bạn sẽ kết thúc khi quá trình của bạn kết thúc và bạn tránh mở quá nhiều tệp.

Tôi đang cố gắng nối dữ liệu vào tệp nhật ký bằng Node.js và điều đó hoạt động tốt nhưng nó sẽ không đến dòng tiếp theo.

var stream = fs.createWriteStream("append.txt", {flags:'a'});
console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
    stream.write(index + "\n");
});
console.log(new Date().toISOString());
stream.end();
1 dường như không hoạt động trong chức năng của tôi dưới đây. Bất kỳ đề xuất?

Nội phân Chính showShow

  • 1. Tập tin đồng bộ
  • 2. Tệp không đồng bộ
  • 3. Sử dụng WritStream
  • Bài viết liên quan:
  • Làm cách nào để thêm một dòng mới trong nodejs?
  • Làm cách nào để nối một tệp trong Node JS?
  • Sự khác biệt giữa writefile và appendfile là gì?
  • Điều gì là đúng về chức năng phụ lục của mô -đun FS?

function processInput ( text ) 
{     
  fs.open('H://log.txt', 'a', 666, function( e, id ) {
   fs.write( id, text + "\n", null, 'utf8', function(){
    fs.close(id, function(){
     console.log('file is updated');
    });
   });
  });
 }

FS. Phương thức appendFile () được sử dụng để nối không đồng bộ dữ liệu đã cho vào một tệp. Một tệp mới được tạo nếu nó không tồn tại. Tham số tùy chọn có thể được sử dụng để sửa đổi hành vi của hoạt động.

Tôi đang cố gắng nối dữ liệu vào tệp nhật ký bằng Node.js và điều đó hoạt động tốt nhưng nó sẽ không đến dòng tiếp theo.

var stream = fs.createWriteStream("append.txt", {flags:'a'});
console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
    stream.write(index + "\n");
});
console.log(new Date().toISOString());
stream.end();
1 dường như không hoạt động trong chức năng của tôi dưới đây. Bất kỳ đề xuất?20 gold badges73 silver badges144 bronze badges

Nội phân Chính showApr 30, 2012 at 13:15

1

1. Tập tin đồng bộ

2. Tệp không đồng bộ

Muadadip

8.42020 Huy hiệu vàng73 Huy hiệu bạc144 Huy hiệu đồngApr 30, 2012 at 13:17

Hỏi ngày 30 tháng 4 năm 2012 lúc 13:15Rob Hruska

Có vẻ như bạn đang chạy nó trên Windows (với đường dẫn tệp

var stream = fs.createWriteStream("append.txt", {flags:'a'});
console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
    stream.write(index + "\n");
});
console.log(new Date().toISOString());
stream.end();
2 của bạn).30 gold badges165 silver badges190 bronze badges

2

Hãy thử sử dụng

var stream = fs.createWriteStream("append.txt", {flags:'a'});
console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
    stream.write(index + "\n");
});
console.log(new Date().toISOString());
stream.end();
3 thay vì chỉ
var stream = fs.createWriteStream("append.txt", {flags:'a'});
console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
    stream.write(index + "\n");
});
console.log(new Date().toISOString());
stream.end();
1.

var os = require("os");

function processInput ( text ) 
{     
  fs.open('H://log.txt', 'a', 666, function( e, id ) {
   fs.write( id, text + os.EOL, null, 'utf8', function(){
    fs.close(id, function(){
     console.log('file is updated');
    });
   });
  });
 }

Thành thật mà nói,

var stream = fs.createWriteStream("append.txt", {flags:'a'});
console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
    stream.write(index + "\n");
});
console.log(new Date().toISOString());
stream.end();
1 là tốt; Có lẽ bạn đang xem tệp nhật ký trong notepad hoặc một cái gì đó khác không khiến các dòng không phải Windows. Hãy thử mở nó trong một trình xem/trình soạn thảo khác (ví dụ: WordPad).Sep 18, 2015 at 18:29

Đã trả lời ngày 30 tháng 4 năm 2012 lúc 13:17shinzo

Rob Hruskarob Hruska1 gold badge8 silver badges2 bronze badges

7

Huy hiệu vàng 116K30

  var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
  stream.once('open', function(fd) {
    stream.write(msg+"\r\n");
  });

Sử dụng hằng số os.eol thay thế.Aug 29, 2020 at 5:36

Đã trả lời ngày 18 tháng 9 năm 2015 lúc 18:29Codemaker

Shinzoshinzo3 gold badges66 silver badges60 bronze badges

1.2091 Huy hiệu vàng8 Huy hiệu bạc2 Huy hiệu đồng

let content = 'some text';
content += "\n";
fs.appendFile("helloworld.txt", content, (err) => {
    return console.log(err);
});

Sử dụng kết hợp

var stream = fs.createWriteStream("append.txt", {flags:'a'});
console.log(new Date().toISOString());
[...Array(10000)].forEach( function (item,index) {
    stream.write(index + "\n");
});
console.log(new Date().toISOString());
stream.end();
3 để nối một dòng mới trong Node JSDec 27, 2021 at 10:57

Đã trả lời ngày 29 tháng 8 năm 2020 lúc 5:36hamon

CodemakerCodemaker2 silver badges9 bronze badges

1

9.2793 huy hiệu vàng66 Huy hiệu bạc60 Huy hiệu đồng

Ngoài ra, bạn có thể sử dụng phương pháp Fs.AppendFile

1. Tập tin đồng bộ

2. Tệp không đồng bộ

fs.appendFileSync( path, data )

Muadadip

const fs = require('fs');
fs.appendFileSync('/home/ubuntu/data.txt', 'test new line');

8.42020 Huy hiệu vàng73 Huy hiệu bạc144 Huy hiệu đồng

2. Tệp không đồng bộ

Trong trường hợp này, chúng tôi sử dụng phương thức phụ lục để thêm dòng văn bản mới không đồng bộ. Đây là cú pháp của nó.

fs.appendFile( path, data[, options], callback )

Đây là một ví dụ.

{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
    at Error (native)
  errno: -4066,
  code: 'EMFILE',
  syscall: 'open',
  path: 'C:\\mypath\\append.txt' }
0

Trong trường hợp tệp không đồng bộ, điều khiển sẽ được trả lại cho luồng thực thi chính, nghĩa là, các dòng mã tiếp theo sẽ tiếp tục được thực thi mà không cần chờ hoàn thành tệp. Điều này rất hữu ích nếu mã tiếp theo không phụ thuộc vào thông tin mới nhất có trong tệp của bạn.

Điều quan trọng cần lưu ý là Phụ lục mở một xử lý tệp mới mỗi khi bạn có thể gọi nó. Vì vậy, nó rất hữu ích nếu bạn muốn cập nhật tệp của mình thỉnh thoảng. Tuy nhiên, bạn nên tránh sử dụng nó để cập nhật tệp thường xuyên như cập nhật nhật ký hoặc gọi nó trong một vòng lặp.

Trong những trường hợp như vậy, bạn phải sử dụng hàm fs.writeStream () như hình dưới đây.

3. Sử dụng WritStream

WritStream sử dụng cùng một trình xử lý tệp để thực hiện nhiều bản cập nhật. Đó là một cách tuyệt vời để liên tục ghi vào các tệp, mà không hết bộ nhớ. Đây là một ví dụ.

{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
    at Error (native)
  errno: -4066,
  code: 'EMFILE',
  syscall: 'open',
  path: 'C:\\mypath\\append.txt' }
1

Trong mã trên, chúng tôi chỉ đơn giản là lặp từ 1 đến 10000 và thêm từng số nguyên vào tệp của chúng tôi. Trong dòng đầu tiên, chúng tôi tạo một luồng. Tiếp theo, chúng tôi sử dụng nó trong một vòng lặp để viết giá trị chỉ mục vòng trong mỗi lần lặp. Cuối cùng, chúng tôi đóng luồng với hàm stream.end ().

Trong bài viết này, chúng tôi đã thấy cả hai cách đồng bộ và không đồng bộ để nối tệp trong nodejs. Chúng tôi cũng đã xem xét cách nối tệp dưới dạng luồng.

Cũng đọc:

Cách chạy ứng dụng NodeJS trong nền để sửa lỗi nginx ngược dòng hết thời gian để sửa lỗi Eaddrinuse trong nodejshow để ngăn chặn truy cập tệp trực tiếp trong phphow để bật ES6 nhập trong nodejs
How to Fix NGINX Upstream Timed Out Error
How to Fix EADDRINUSE Error in NodeJS
How to Prevent Direct File Access in PHP
How to Enable ES6 Import in NodeJS

Bài viết liên quan:

Làm cách nào để thêm một dòng mới trong nodejs?

Hãy thử sử dụng \ r \ n thay vì chỉ \ n. \ n vẫn ổn; Có lẽ bạn đang xem tệp nhật ký trong notepad hoặc một cái gì đó khác không khiến các dòng không phải Windows. Hãy thử mở nó trong một trình xem/trình soạn thảo khác (ví dụ: WordPad).\r\n instead of just \n. \n is fine; you're probably viewing the log file in notepad or something else that doesn't render non-Windows newlines. Try opening it in a different viewer/editor (e.g. Wordpad).

Làm cách nào để nối một tệp trong Node JS?

Để nối dữ liệu vào tệp trong nút. JS, sử dụng hàm fs fs appendFile () cho hoạt động tệp không đồng bộ hoặc nút fs fs appendFilesync () cho hoạt động tệp đồng bộ.use Node FS appendFile() function for asynchronous file operation or Node FS appendFileSync() function for synchronous file operation.

Sự khác biệt giữa writefile và appendfile là gì?

WriteFile với tên tệp và dữ liệu để ghi vào tệp đó (dưới dạng chuỗi hoặc bộ đệm). Điều đó sẽ ghi đè lên toàn bộ tệp, vì vậy để chỉ nối dữ liệu đó vào tệp, chuyển một đối tượng tùy chọn với phím cờ được đặt thành a. Hoặc, bạn có thể sử dụng FS. Phụ lục.

Điều gì là đúng về chức năng phụ lục của mô -đun FS?

FS. Phương thức appendFile () được sử dụng để nối không đồng bộ dữ liệu đã cho vào một tệp. Một tệp mới được tạo nếu nó không tồn tại. Tham số tùy chọn có thể được sử dụng để sửa đổi hành vi của hoạt động.used to asynchronously append the given data to a file. A new file is created if it does not exist. The options parameter can be used to modify the behavior of the operation.