2011-02-24 92 views
3

使用在phonegap api上找到的方法我尝试写入文件。这适用于Android,但在iOS设备上,作者正在返回错误。每当我调用writeFile()时,它会返回一个错误,并且传入writeFail的参数为-1。我看不出为什么-1被传递到错误函数,或者为什么它甚至没有开始。是否有其他人使用iOS设备上的fileWriter,或者你能看到我可能做错了什么?无法用手机写入文件

function writeFile() { 
    var paths = navigator.fileMgr.getRootPaths(); 
    var writer = new FileWriter(paths[0] + "write.txt"); 
    writer.onwrite = writeSuccess; 
    writer.onerror = writeFail; 

    writer.write("some sample text"); 
    // The file is now 'some sample text' 
} 

function writeSuccess() { 
    console.log("Write has succeeded"); 
} 

function writeFail(evt) { 
    console.log(evt); 
    console.log(evt.target.error.code); 
} 
+0

什么路径不'navigator.fileMgr.getRootPaths()'返回? – 2011-02-24 22:43:35

+0

出于好奇,为什么你需要使用FileWriter,而不是更简单地使用LocalStorage(http://dev.w3.org/html5/webstorage/#the-storage-interface) – 2011-02-25 15:11:06

+1

navigator.fineMgr.getRootPaths()返回数组''“var/mobile/Applications/{UUID}/Documents”, “/ var/mobile/Applications/{UUID}/Library”, “/ private/var/mobile/Applications/{UUID}/tmp /“]'。其中{UUID}是ios设备的唯一ID。 @ jeff-kelley – 2011-03-14 17:32:00

回答

2

我有同样的问题,但我通过邮件列表爬,终于找到了解决办法:

var writer = new FileWriter("write.txt"); 

这是它。只需不要预先安装“文档”路径。该文档是错误的(仍然)。

不要忘记不要使用“readAsDataURL”,因为它会默默无闻(在iOS上)。希望我能帮助你。

+0

那么如果不能使用getRootPaths中的基本路径,那么如何写入“〜/ Library/Caches”或“〜/ Library/Application Support” )? – chrysanhy 2012-07-02 11:55:03

+0

不幸的是,这并没有为我工作(phonegap版本3.1.0)。 FileWriter想要一个完整的路径。获取FileSystem对象并在FileWriter构造函数中使用其root.fullPath。我认为罗德里戈在这个页面上的回答看起来是正确的路要走。 – 2014-01-03 22:02:35

2

如果要写入一个文件,这是函数(PhoneGap的2.5)

function fileWrite(filePath, text) { 
    var onFSWin = function(fileSystem) { 
    fileSystem.root.getFile(filePath, {create: true, exclusive: false}, onGetFileWin, onFSFail); 
    } 
    var onGetFileWin = function(fileEntry) { 
    fileEntry.createWriter(gotFileWriter, onFSFail); 
    } 
    var gotFileWriter = function(writer) { 
    writer.write(text); 
    } 
    var onFSFail = function(error) { 
    console.log(error.code); 
    } 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFSWin, onFSFail); 
}