在 Gear S 中创建和写入文件
Creating and writing into a file in Gear S
我有一个为手表定义的数据库 (IDBStore)。我正在尝试将其数据写入文件并清除数据库。请看下面的代码:
function writeDataLocally() {
var database = getDatabase();
var onsuccess = function(array){
var documentsDir, newFile;
tizen.filesystem.resolve("documents", onResolve, function(error) {
console.log("Could not resolve documents folder.");
console.log(error);
});
function onResolve(result) {
newFilePath = "MyFolder";
documentsDir = result;
var newDir = documentsDir.createDirectory(newFilePath);
console.log("New folder is created.");
/* ^^^^^ I can see this log ^^^^^ */
newFile = documentsDir.createFile(newFilePath + "/sensordata_" + new TimeStamp() + ".txt");
/* But the following log is not displayed! */
/* I think the error now is in here! */
console.log("New file is created.");
}
if(newFile != null) {
newFile.openStream("w", onOpenStream, function(error) {
console.log("Could not create the file.");
console(error);
}, "UTF-8");
function onOpenStream(fs) {
console.log(JSON.stringify(array));
fs.write(JSON.stringify(array));
fs.close();
console.log("Data is written into the file.");
}
}
},
onerror = function(error){
console.log(error);
};
database.getAll(onsuccess, onerror);
}
我没有收到任何日志,它说它无法创建所需的目录。你能看看这个简单函数中的错误吗?它可能是基本的,但我是 tizen 的新手。谢谢
更新
现在我可以使用以下代码以我喜欢的方式创建我的文件夹和文件:
function writeDataLocally() {
var database = getDatabase();
var onsuccess = function(array){
var documentsDir, newFile;
tizen.filesystem.resolve("documents", onResolve, function(error) {
console.log("Could not resolve documents folder.");
console.log(error);
});
function onResolve(result) {
newFilePath = "MyFolder";
documentsDir = result;
var newDir = documentsDir.createDirectory(newFilePath);
console.log("New folder is created.");
d = new Date();
newFile = newDir.createFile("sensordata_" + d.toDateString() + ".txt");
console.log("New file is created.");
if(newFile != null) {
newFile.openStream("w", onOpenStream, function(error) {
console.log("Could not create the file.");
console(error);
}, "UTF-8");
function onOpenStream(fs) {
console.log("File is opened and ready to write...");
fs.write(JSON.stringify(array));
fs.close();
newFile = null;
console.log("Data is written into the file");
};
}
},
onerror = function(error){
console.log(error);
};
database.getAll(onsuccess, onerror);
}
查看 newDir
和“newFile”的变化。但是现在是这样的情况:
如果该文件夹存在,则不会发生任何事情!从设备中删除 myFolder 后,文件和文件夹都会创建,数据也会写入文件,但只是第一次。
如果设备中已有 myFolder 文件夹,则不会在该目录中创建其他文件。建议?
您需要在应用的 config.xml 文件中添加以下权限:
<tizen:privilege name="http://tizen.org/privilege/filesystem.write"/>
<tizen:privilege name="http://tizen.org/privilege/filesystem.read"/>
那么你就可以创建directory/file.
编辑
我认为您的代码中有错字。
documentsDir = result;
var newDir = docuemntsDir.createDirectory(...
应该是,
documentsDir = result;
var newDir = documentsDir.createDirectory(...
编辑2
试试下面两种方法:
方法一-
newFile = documentsDir.createFile("sensordata.txt");
方法 2 -
var timestamp = new TimeStamp();
newFile = documentsDir.createFile(newFilePath + "sensordata_" + timestamp + ".txt");
如果这两种方法都有效,则将 "Method 2" 用于您的代码。
EDIT3
回调函数 onResolve(),初始化 "newFile" var,而您正试图在它可能尚未初始化的地方访问它。
将下面的代码放在 onResolve() 函数中
if(newFile != null) {
newFile.openStream("w", onOpenStream, function(error) {
console.log("Could not create the file.");
console(error);
}, "UTF-8");
此外,onResolve 函数中有错字,代码如下
newFile = newDir.createFile("sensordata_" + d.toDateString() + ".txt");
应该是
newFile = documentsDir.createFile("sensordata_" + d.toDateString() + ".txt");
你的代码还有一个问题,你不能将变量直接传递给 createDirectory
var newDir = documentsDir.createDirectory(newFilePath);
请按原样使用字符串,即
var newDir = documentsDir.createDirectory("MyFolder");
EDIT4
基本上您需要首先尝试解析您创建的文件夹,即如果它存在则无需创建新文件夹。
从 onsuccess 中删除此代码
var documentsDir, newFile;
tizen.filesystem.resolve("documents", onResolve, function(error) {
console.log("Could not resolve documents folder.");
console.log(error);
});
并在其位置添加以下代码。
var documentsDir, newFile;
tizen.filesystem.resolve("MyFolder", onMyFolderResolve, function(error) {
console.log("Your MyFolder doesn't exists.");
console.log("Now resolve documents folder");
tizen.filesystem.resolve("documents", onResolve, function(error){console.log("Could not resolve documents folder");});
});
function onMyFolderResolve(result) {
console.log("Your folder exists");
myfolderDir = result;
d = new Date();
newFile = myfolderDir.createFile("sensordata_" + d.toDateString() + ".txt");
}
我有一个为手表定义的数据库 (IDBStore)。我正在尝试将其数据写入文件并清除数据库。请看下面的代码:
function writeDataLocally() {
var database = getDatabase();
var onsuccess = function(array){
var documentsDir, newFile;
tizen.filesystem.resolve("documents", onResolve, function(error) {
console.log("Could not resolve documents folder.");
console.log(error);
});
function onResolve(result) {
newFilePath = "MyFolder";
documentsDir = result;
var newDir = documentsDir.createDirectory(newFilePath);
console.log("New folder is created.");
/* ^^^^^ I can see this log ^^^^^ */
newFile = documentsDir.createFile(newFilePath + "/sensordata_" + new TimeStamp() + ".txt");
/* But the following log is not displayed! */
/* I think the error now is in here! */
console.log("New file is created.");
}
if(newFile != null) {
newFile.openStream("w", onOpenStream, function(error) {
console.log("Could not create the file.");
console(error);
}, "UTF-8");
function onOpenStream(fs) {
console.log(JSON.stringify(array));
fs.write(JSON.stringify(array));
fs.close();
console.log("Data is written into the file.");
}
}
},
onerror = function(error){
console.log(error);
};
database.getAll(onsuccess, onerror);
}
我没有收到任何日志,它说它无法创建所需的目录。你能看看这个简单函数中的错误吗?它可能是基本的,但我是 tizen 的新手。谢谢
更新
现在我可以使用以下代码以我喜欢的方式创建我的文件夹和文件:
function writeDataLocally() {
var database = getDatabase();
var onsuccess = function(array){
var documentsDir, newFile;
tizen.filesystem.resolve("documents", onResolve, function(error) {
console.log("Could not resolve documents folder.");
console.log(error);
});
function onResolve(result) {
newFilePath = "MyFolder";
documentsDir = result;
var newDir = documentsDir.createDirectory(newFilePath);
console.log("New folder is created.");
d = new Date();
newFile = newDir.createFile("sensordata_" + d.toDateString() + ".txt");
console.log("New file is created.");
if(newFile != null) {
newFile.openStream("w", onOpenStream, function(error) {
console.log("Could not create the file.");
console(error);
}, "UTF-8");
function onOpenStream(fs) {
console.log("File is opened and ready to write...");
fs.write(JSON.stringify(array));
fs.close();
newFile = null;
console.log("Data is written into the file");
};
}
},
onerror = function(error){
console.log(error);
};
database.getAll(onsuccess, onerror);
}
查看 newDir
和“newFile”的变化。但是现在是这样的情况:
如果该文件夹存在,则不会发生任何事情!从设备中删除 myFolder 后,文件和文件夹都会创建,数据也会写入文件,但只是第一次。
如果设备中已有 myFolder 文件夹,则不会在该目录中创建其他文件。建议?
您需要在应用的 config.xml 文件中添加以下权限:
<tizen:privilege name="http://tizen.org/privilege/filesystem.write"/>
<tizen:privilege name="http://tizen.org/privilege/filesystem.read"/>
那么你就可以创建directory/file.
编辑
我认为您的代码中有错字。
documentsDir = result;
var newDir = docuemntsDir.createDirectory(...
应该是,
documentsDir = result;
var newDir = documentsDir.createDirectory(...
编辑2
试试下面两种方法:
方法一-
newFile = documentsDir.createFile("sensordata.txt");
方法 2 -
var timestamp = new TimeStamp();
newFile = documentsDir.createFile(newFilePath + "sensordata_" + timestamp + ".txt");
如果这两种方法都有效,则将 "Method 2" 用于您的代码。
EDIT3
回调函数 onResolve(),初始化 "newFile" var,而您正试图在它可能尚未初始化的地方访问它。
将下面的代码放在 onResolve() 函数中
if(newFile != null) {
newFile.openStream("w", onOpenStream, function(error) {
console.log("Could not create the file.");
console(error);
}, "UTF-8");
此外,onResolve 函数中有错字,代码如下
newFile = newDir.createFile("sensordata_" + d.toDateString() + ".txt");
应该是
newFile = documentsDir.createFile("sensordata_" + d.toDateString() + ".txt");
你的代码还有一个问题,你不能将变量直接传递给 createDirectory
var newDir = documentsDir.createDirectory(newFilePath);
请按原样使用字符串,即
var newDir = documentsDir.createDirectory("MyFolder");
EDIT4 基本上您需要首先尝试解析您创建的文件夹,即如果它存在则无需创建新文件夹。
从 onsuccess 中删除此代码
var documentsDir, newFile;
tizen.filesystem.resolve("documents", onResolve, function(error) {
console.log("Could not resolve documents folder.");
console.log(error);
});
并在其位置添加以下代码。
var documentsDir, newFile;
tizen.filesystem.resolve("MyFolder", onMyFolderResolve, function(error) {
console.log("Your MyFolder doesn't exists.");
console.log("Now resolve documents folder");
tizen.filesystem.resolve("documents", onResolve, function(error){console.log("Could not resolve documents folder");});
});
function onMyFolderResolve(result) {
console.log("Your folder exists");
myfolderDir = result;
d = new Date();
newFile = myfolderDir.createFile("sensordata_" + d.toDateString() + ".txt");
}