2011-02-24 25 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); 
}