2015-06-07 34 views
-1

我有三个文件,我将它们保存为三个变量的字符串。我想连接这些字符串并将它们保存到文件中。问题在于,计算机不会等待在执行写入功能之前完成读取这些文件,并且迟到。我尝试使用回调并计数文件。我是以正确的方式做这件事还是有更好的方法更简单?Nodejs如何将多个文件复制到一个

var 
    start = Date.now(); 
    header = "", 
    content = "", 
    footer = "", 
    html = "", 
    filesLoaded = 0, 
    fileTotal = 3, 
    fs = require('fs'), 
    getFileContent = function(filePath) { 
     fs.readFile(filePath, 'utf8', function(err, data) { 
      if(err) { 
       console.log(err); 
      } else { 
       filesLoaded++; 
       if(filesLoaded >= fileTotal) 
        console.log(Date.now() - start); 
       return data; 
      } 
     }); 
    }, 
    writeIndex = function() { 
     var interval = setInterval(function() { 
      if(filesLoaded >= fileTotal) { 
       html = header + content + footer; 
       console.log(html); 
       fs.writeFile('index.html', html, function(err) { 
        console.log("file not written:e" + err); 
       }); 
       clearInterval(interval); 
      } 
     }, 10); 
    } 

header = getFileContent('header.html'); 
content = getFileContent('content.html'); 
footer = getFileContent('footer.html'); 

writeIndex(); 
+0

怎么样你告诉我们,你的代码,这样我们就可以看到你在做什么错。 – Molda

回答

0

串联在JS很简单:

var combinedString = string1 + string2 + string3 

字符串写入到文件也十分方便,

fs.writeFile('message.txt', 'Hello Node', function (err) {  
    if (err) throw err;  
    console.log('It\'s saved!');  
}); 

现在更换的Hello WorldcombinedString和你有它

+0

如果string1,string2和string3尚未加载呢?这就是真正的乐趣是大声笑的地方。 – zachdyer

+0

然后你必须发布一些代码。你从哪里加载字符串? – Brasilikum

+0

字符串正在从html文件加载。 – zachdyer

0

不确定这是否是最好的解决方案离子,但它的作品。问题是当我在回调中返回数据时,它不会更新我的变量。所以我按照我希望他们读取的顺序将文件名放入数组中。首先是header.html,然后是content.html和footer.html。所以我想我做的是回调链。回调会调用递归函数并读取下一个文件。当它达到总数时,它会写入文件并返回该函数来终止递归函数。但是我想让代码更易于理解。这对我来说似乎有点混乱。

var 
    startTime = Date.now(); 
    html = "", 
    includes = ["header.html","content.html","footer.html"], 
    filesLoaded = 0, 
    fileTotal = 3, 
    fs = require('fs'), 
    compileFile = function() { 
     fs.readFile(includes[filesLoaded], 'utf8', function readFileResponse(err, data) { 
      if(err) { 
       console.log(err); 
      } else { 
       html += data; 
       filesLoaded++; 
       if(filesLoaded >= fileTotal) { 
        writeIndex(); 
        return; 
       } 
       compileFile(); 
      } 
     }); 
    }, 
    writeIndex = function() { 
      console.log(html); 
      fs.writeFile('index.html', html, function(err) { 
       if(err) { 
        console.log("file not written: " + err); 
       } else { 
        console.log("Compiled file in " + String(Date.now() - startTime) + "ms"); 
       } 
      }); 
    } 

compileFile(); 
0
var files = ['a.txt','b.txt','c.txt']; 
var outStream = fs.createWriteStream('outfile.txt'); 
for (file in files) 
    fs.createReadStream(file).pipe(outStream); 
相关问题