2017-02-18 169 views
0

我對NodeJS有點新,我正在研究一個簡單的文件編碼器。NodeJS - 讀取和寫入文件導致損壞

我計劃改變文件的第一個20kb,然後複製剩下的文件。

所以我使用了下面的代碼,但它改變了文件其餘部分的一些字節。

這裏是我的代碼:

var fs = require('fs'); 
var config = require('./config'); 


fs.open(config.encodeOutput, 'w', function(err, fw) { 
    if(err) { 
     console.log(err); 
    } else { 
     fs.readFile(config.source, function(err, data) { 
      var start = 0; 
      var buff = readChunk(data, start); 
      while(buff.length) { 
       if(start < config.encodeSize) { 
        var buffer = makeSomeChanges(buff); 

        writeChunk(fw, buffer); 
       } else { 
        writeChunk(fw, buff); 
       } 

       start += config.ENCODE_BUFFER_SIZE; 
       buff = readChunk(data, start); 
      } 
     }); 
    } 
}); 

function readChunk(buffer, start) { 
    return buffer.slice(start, start + config.ENCODE_BUFFER_SIZE); 
} 

function writeChunk(fd, chunk) { 
    fs.writeFile(fd, chunk, {encoding: 'binary', flag: 'a'}); 
} 

我打開編碼文件,並與原文件進行了比較。

我甚評論如下幾部分:

//if(start < config.encodeSize) { 
// var buffer = makeSomeChanges(buff); 

// writeChunk(fw, buffer); 
//} else { 
    writeChunk(fw, buff); 
//} 

所以我的程序只是將文件複製,但它仍然改變一些字節。

出了什麼問題?

+1

這些文件有什麼區別?有抵消嗎?具體模式是否改變?編碼有沒有問題? – jcaron

回答

0

所以我檢查了模式,我意識到一些字節不在正確的位置,我猜想它應該是因爲我使用異步寫入功能。

我將fs.writeFile()更改爲fs.writeFileSync(),現在一切正常。