我的某些打印机有问题,我的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。
答案 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);
});
});
}