chrome.filesystem创建文件并重命名

时间:2016-01-06 12:02:28

标签: xml google-chrome printing google-chrome-extension google-chrome-app

我的某些打印机有问题,我的Chrome应用创建文件(.xml),内容在文件夹中然后打印机打印出来,但问题是chrome首先创建空文件,然后在其中写入内容..

就像这个问题中的一个答案:"Premature end of file" error when Java read and writes XML data files

  

将文件写入thename.xml.part,然后完成/关闭到a   重命名为thename.xml,这使得写入更接近原子 -   读者无法阅读它,直到它确实完成为止   寻找" .xml"仅限文件。

我如何在Chrome应用程序中执行此操作?

到目前为止,这是我的代码:

    chrome.fileSystem.getWritableEntry(printer_location, function(entry) {
        var uniqid = (Math.floor((Math.random() * 10) + 1)+Date.now()).toString();
        entry.getFile(uniqid+'.xml', {create:true}, function(entry) {
            entry.createWriter(function(writer) {
                writer.write(new Blob([xmlPrintText], {type: 'text/plain'}));
            });
        });
    });

此代码创建文件,但我需要使用.part创建,然后在完成后,重命名为.part。

1 个答案:

答案 0 :(得分:0)

找到解决方案:

chrome.fileSystem.getWritableEntry(print_location, function(entry) {
    var uniqid = (Math.floor((Math.random() * 10) + 1)+Date.now()).toString();
    var fileName = uniqid+'.xml';
    entry.getFile(fileName+'.part', {create:true}, function(entry) {
        entry.createWriter(function(writer) {
            writer.write(new Blob([xmlPrintText], {type: 'text/plain'}));
            writer.onwriteend = function(e) {
                rename(fileName+'.part', fileName);
            };
        });
    });
});
function rename(oldName, newName) {
    chrome.fileSystem.getWritableEntry(printer_location, function(entry) {
        entry.getFile(oldName, {}, function(fileEntry) {
            fileEntry.moveTo(entry, newName);
        });
    });
}