1. 打开 JSON 文件:在 `QFile` 中使用 `open` 方法打开 JSON 文件,并设置打开模式为读写模式。例如:
```cpp
QFile file("example.json")
if (!file.open(QIODevice::ReadWrite)) {
// 处理文件打开失败的情况
}
```
在上面的示例中,我们打开了名为 `example.json` 的 JSON 文件,并将打开模式设置为读写模式。
2. 读取 JSON 数据:在 `QFile` 中使用 `readAll` 方法读取 JSON 文件的所有内容,并将其存储为一个 `QByteArray` 对象。例如:
```cpp
QByteArray data = file.readAll()
```
在上面的示例中,我们使用 `readAll` 方法读取 JSON 文件的所有内容,并将其存储为一个 `QByteArray` 对象。
3. 解析 JSON 数据:使用 `QJsonDocument` 类的 `fromJson` 方法将 `QByteArray` 对象解析为 JSON 数据。例如:
```cpp
QJsonDocument doc = QJsonDocument::fromJson(data)
```
在上面的示例中,我们使用 `QJsonDocument` 类的 `fromJson` 方法将 `QByteArray` 对象解析为 JSON 数据,并将其存储为一个 `QJsonDocument` 对象。
4. 修改 JSON 数据:通过 `QJsonDocument` 对象修改 JSON 数据。例如:
```cpp
QJsonObject obj = doc.object()
obj["name"] = "John"
doc.setObject(obj)
```
在上面的示例中,我们首先通过 `QJsonDocument` 对象的 `object` 方法获取 JSON 数据的 `QJsonObject` 对象,然后修改该对象的 `"name"` 属性,并使用 `setObject` 方法更新 `QJsonDocument` 对象。
5. 写入 JSON 数据:在 `QFile` 中使用 `write` 方法将修改后的 JSON 数据写入文件。例如:
```cpp
file.seek(0)
file.write(doc.toJson())
```
在上面的示例中,我们首先使用 `seek` 方法将文件指针移动到文件开头,然后使用 `write` 方法将修改后的 JSON 数据写入文件。
6. 关闭文件:在完成文件 *** 作后,使用 `close` 方法关闭 `QFile` 对象。例如:
```cpp
file.close()
```
在上面的示例中,我们使用 `close` 方法关闭了 `QFile` 对象。
以上就是同时读写 JSON 文件的步骤。需要注意的是,在实际应用中,还需要考虑一些异常情况,如文件打开失败、文件读取失败、JSON 解析失败等,需要添加适当的错误处理代码来处理这些异常情况。
FILE *fpfp = fopen("c:\\temp\\test.txt", "r+") //由于反斜杠\是控制字符,所以必须再加一个反斜杠
打开文本文件:
"r":只能从文件中读数据,该文件必须先存在,否则打开失败
"w":只能向文件写数据,若指定的文件不存在则创建它,如果存在则先删除它再重建一个新文件
"a":向文件增加新数据(不删除原有数据),若文件不存在则打开失败,打开时位置指针移到文件末尾
"r+":可读/写数据,该文件必须先存在,否则打开失败
"w+":可读/写数据,用该模式打开新建一个文件,先向该文件写数据,然后可读取该文件中的数据
"a+":可读/写数据,原来的文件不被删去,位置指针移到文件末尾
打开二进制文件的模式与打开文本文件的含义是一样的,不同的是模式名称里面多一个字母'b’,以表示以二进制形式打开文件。
1、一般的加锁,针对并发量不大的情况;
2、对文件进行加锁时,设置一个超时时间。大致实现如下:
if($fp=fopen($fileName,'a')){
$startTime=microtime()
do{
$canWrite=flock($fp,LOCK_EX)
if(!$canWrite){
usleep(round(rand(0,100)*1000))
}
}while((!$canWrite)&&((microtime()-$startTime)<1000))
if($canWrite){
fwrite($fp,$dataToSave)
}
fclose($fp)
}
3、对 *** 作的文件进行随机读写,以降低并发的可能性;
4、将所有要 *** 作的进程放入一个队列中;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)