로그 파일에 문자열 을 추가 하려고 합니다. 그러나 writeFile은 문자열을 쓰기 전에 매번 내용을 지 웁니다.
fs.writeFile('log.txt', 'Hello Node', function (err) {
if (err) throw err;
console.log('It\'s saved!');
}); // => message.txt erased, contains only 'Hello Node'
이 방법을 쉽게 수행하는 방법을 알고 있습니까?
답변
때때로 추가하는 경우을 사용할 수 있습니다 appendFile
.이 함수는 호출 될 때마다 새 파일 핸들을 만듭니다.
비동기 적으로 :
const fs = require('fs');
fs.appendFile('message.txt', 'data to append', function (err) {
if (err) throw err;
console.log('Saved!');
});
동 기적으로 :
const fs = require('fs');
fs.appendFileSync('message.txt', 'data to append');
그러나 동일한 파일에 반복적으로 추가하는 경우 파일 핸들 을 재사용하는 것이 훨씬 좋습니다 .
답변
로그 파일에 쓰려고 할 때 (예 : 파일 끝에 데이터 추가) 절대 사용 하지 마십시오 appendFile
. appendFile
파일에 추가 한 각 데이터 조각에 대한 파일 핸들을 엽니 다. 잠시 후에 아름다운 EMFILE
오류가 발생합니다.
appendFile
사용하기 쉽지 않은 것을 추가 할 수 있습니다 WriteStream
.
예 appendFile
:
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());
내 컴퓨터에서 최대 8000까지 파일에 데이터를 추가하면 다음을 얻을 수 있습니다.
{ 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' }
또한 appendFile
활성화되면 기록되므로 타임 스탬프에 의해 로그가 기록되지 않습니다. 예를 들어 테스트 할 수 있으며 100000 대신 1000을 설정하면 순서는 무작위이며 파일에 대한 액세스에 따라 다릅니다.
파일에 추가하려면 다음 과 같이 쓰기 가능한 스트림 을 사용해야합니다 .
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();
당신이 원할 때 그것을 끝내십시오. stream.end()
기본 옵션 인 을 (를) 사용하지 않아도 AutoClose:true
되므로 프로세스가 끝나면 파일이 종료되고 너무 많은 파일을 열지 않아도됩니다 .
답변
createWriteStream을 사용하는 코드는 모든 쓰기에 대해 파일 설명자를 작성합니다. log.end는 쓰기 직후에 노드를 닫도록 요청하기 때문에 더 좋습니다.
var fs = require('fs');
var logStream = fs.createWriteStream('log.txt', {flags: 'a'});
// use {flags: 'a'} to append and {flags: 'w'} to erase and write a new file
logStream.write('Initial line...');
logStream.end('this is the end line');
답변
또한 기존 파일에 데이터를 추가하기 위해 appendFile
플래그를 전달할 수도 writeFile
있습니다.
fs.writeFile('log.txt', 'Hello Node', {'flag':'a'}, function(err) {
if (err) {
return console.error(err);
}
});
플래그 ‘a’를 전달하면 파일 끝에 데이터가 추가됩니다.
답변
그것을 열고 나서 써야합니다.
var fs = require('fs'), str = 'string to append to file';
fs.open('filepath', 'a', 666, function( e, id ) {
fs.write( id, 'string to append to file', null, 'utf8', function(){
fs.close(id, function(){
console.log('file closed');
});
});
});
다음은 매개 변수를 설명하는 데 도움이되는 몇 가지 링크입니다.
편집 :이 답변은 더 이상 유효하지 않습니다 . 추가 하려면 새로운 fs.appendFile 메소드를 살펴보십시오 .
답변
Node.js 0.8에는 fs.appendFile
다음 이 있습니다 .
fs.appendFile('message.txt', 'data to append', (err) => {
if (err) throw err;
console.log('The "data to append" was appended to file!');
});
답변
fd = fs.openSync(path.join(process.cwd(), 'log.txt'), 'a')
fs.writeSync(fd, 'contents to append')
fs.closeSync(fd)