File 使用phonegap/cordova文件插件的问题第1部分

File 使用phonegap/cordova文件插件的问题第1部分,file,cordova,phonegap-plugins,cordova-3,File,Cordova,Phonegap Plugins,Cordova 3,我想在我的cordova应用程序中添加一些简单的日志功能 所以我添加了文件插件,实现了一个超级简单的日志方法并进行了测试 我的配置: $ cordova --version 3.5.0-0.2.7 $ cordova plugins org.apache.cordova.file 1.3.0 "File" 测试设备为华为u8850,运行安卓2.3.5 记录器: window.MyLog = { log: function(line){

我想在我的cordova应用程序中添加一些简单的日志功能

所以我添加了文件插件,实现了一个超级简单的日志方法并进行了测试

我的配置:

    $ cordova --version
    3.5.0-0.2.7

    $ cordova plugins
    org.apache.cordova.file 1.3.0 "File"
测试设备为华为u8850,运行安卓2.3.5

记录器:

window.MyLog = {
    log: function(line){
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(FS) {
            FS.root.getFile('the_log1.txt', {"create":true, "exclusive":false},
                function(fileEntry) {
                    fileEntry.createWriter(
                        function(writer) {
                            console.log(line);
                            writer.seek(writer.length);     // append to eof
                            writer.write(line + '\n');      // write the line
                        }, fail);
                }, fail);
        }, fail);
    }
};
测试:

    MyLog.log(new Date().toLocaleTimeString());
一切似乎都很好:

  • 文件已创建,行已插入
  • 再次启动应用程序时,会追加该行
但是: 我试着写一些额外的字符:

window.MyLog = {
    log: function(line){
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(FS) {
            FS.root.getFile('the_log2.txt', {"create":true, "exclusive":false},
                function(fileEntry) {
                    fileEntry.createWriter(
                        function(writer) {
                            console.log(line);
                            writer.seek(writer.length);     // append to eof
                            writer.write(line + '\n');      // write the line
                            writer.write('----' + '\n');    // extra write
                        }, fail);
                }, fail);
        }, fail);
    }
};
我发现这个日志cat输出:

    16:00:00
    processMessage failed: Error: [object Object]
    processMessage failed: Stack: undefined
    processMessage failed: Message: S01 File218896726 {"lastModifiedDate":1409839200000,"fullPath":"\/the_log2.txt","type":"text\/plain","name":"the_log2.txt","size":0}
->似乎不可能多次使用writer.write命令

问:

  • 为什么会这样?它是一个bug还是一个特性
  • 是否有关于此插件使用的文档/示例代码? (这里的文档:没有我想要的那么全面)

我认为在将任何内容写入文件后,必须实现并等待
onwriteend()
事件触发

一旦启动了
onwriteend()
,您就可以再次写入该文件

当我创建一个日志功能时,我所做的事情是这样的(你可以将其用作指南,我只是在头脑中输入):

我还创建了一个
缓存
(一个
tmp_变量
),用于我想在日志文件中写入的内容。一旦这个
tmp_变量
达到特定大小,我就将其转储到日志文件中。因此,它在
文件系统
访问上更轻松


您可以阅读关于
writer
write
on

的信息。您是否尝试实现
onwriteend()
事件回调?我明白了。我真的得看文件。使用onwriteend方法是关键。但是由于文件是一个日志,我必须确保快速追加行-在这种情况下,缓存不是一个选项。我目前正在编写一个带有一些基本功能的小型文本文件包装器,因此应用程序可以轻松地附加行,而无需处理文件接口的asyn实现。我将上传该代码作为第二个问题的答案:
function fileItemSuccessWrite(writer){
    writer.seek(writer.length);

    writer.onwriteend = function(e) {
         // TODO WRITE AGAIN
    };

    writer.onerror = function(e) {
         // HANDLE ERROR
    };

    writer.write(YOUR_LOG_TO_WRITE);

}
fileEntry.createWriter(fileItemSuccessWrite, fileItemFailWrite);