带有覆盖的PhantomJS复制文件

时间:2014-08-18 03:34:24

标签: javascript phantomjs

从他们的document阅读:

copy(source, destination)

目前,我处理此问题的方法是在复制前检查fs.exist('myfile')并手动删除它:

var fs = require('fs');
var fileName = 'myfile-backup.txt';

if (fs.exists(fileName)) {
    fs.remove(fileName);
}
fs.copy('myfile.txt', fileName);

phantom.exit();

我不知道是否有更好的方法来覆盖该文件。当我无法删除文件时,检查现有文件可能存在潜在问题。我可能需要使用这种方法进行更多的错误处理。这似乎是一项常见的任务,所以我想知道人们提出了什么解决方案。

1 个答案:

答案 0 :(得分:0)

我已在fs模块中写了small extension。如果您尝试使用fs.copy覆盖文件,它将抛出一个异常,您可以捕获该异常来执行一些错误处理,例如删除现有文件。

如果每次在maxTrials试用版和copy之间存在创建文件的问题时,我还添加了一个可选的remove参数。

var fs = require('fs');

fs.overwrite = function(source, destination, maxTrials){
    var overwritten = false;
    var trials = 0;
    maxTrials = parseInt(maxTrials)
    maxTrials = !!maxTrials ? maxTrials : null;
    while(!overwritten) {
        if (maxTrials && trials > maxTrials) {
            return -1;
        }
        try {
            this.copy(source, destination);
            overwritten = true;
        } catch(e) {
            if (fs.exists(destination)) {
                fs.remove(destination);
            } else {
                return -2;
            }
        }
        trials++;
    }
    return trials;
};