相关疑难解决方法(0)

如何安全地写入文件?

想象一下,您有一个用于处理某种XML文件或配置文件的库.该库将整个文件读入内存并提供编辑内容的方法.完成操作内容后,可以调用a write将内容保存回文件.问题是如何以安全的方式做到这一点.

覆盖现有文件(开始写入原始文件)显然不安全.如果write方法在完成之前失败,则最终会得到一个半写文件并且您丢失了数据.

更好的选择是在某处写入临时文件,当write方法完成后,临时文件复制到原始文件.

现在,如果副本以某种方式失败,您仍然可以在临时文件中正确保存数据.如果复制成功,您可以删除临时文件.

在POSIX系统上,我猜你可以使用rename系统调用,这是一个原子操作.但是你如何在Windows系统上做到最好?特别是,你如何使用Python处理这个问题?

另外,还有另一种安全写入文件的方案吗?

python windows file

15
推荐指数
4
解决办法
7403
查看次数

如何使用Delphi管理来自EXE的多个实例的XML文件的并发输入/输出访问.

我有一个用Delphi编写的命令行工具,其工作是在XML文件中插入一个节点,然后立即退出.我需要使工具的几个实例同时执行,并将节点插入到同一个XML中.

为了实现这个目的,我引入了一个简单的文件"mutex" - 该工具在写入XML之前创建一个临时文件,然后在完成witing之后删除临时文件.因此,如果执行另一个实例,它会检查是否存在此临时文件,并等待它被删除.然后它再次创建临时文件,写入XML并删除临时文件.

问题是只有当2-3个实例尝试同时写入XML文件时才能正常工作.当有更多实例时 - 其中一些实例只是永远等待,并且永远不会将节点附加到XML中.

是否有更好的方法可以使大量实例同时运行并写入XML?

xml delphi mutex

5
推荐指数
1
解决办法
2102
查看次数

Delphi - 在共享环境中写入/读取文件

我对放在局域网中的文件有一些问题:有一个Delphi程序(服务器)应该写一些文件,只能由多个Deplhi程序(客户端)读取.我在服务器中使用这些简单的指令进行写入(DataList是一个TStrings):

Stream:=TFileStream.Create(filePath,fmOpenWrite or fmShareDenyWrite);
try
 DataList.SaveToStream(Stream);
finally
 Stream.Free;
end;
Run Code Online (Sandbox Code Playgroud)

如果上面的文件被修改(通过检查FileAge),客户端每5秒检查一次,如果发生了修改,它们按以下方式加载DataList:

try
 Stream:=TFileStream.Create(filePath,fmOpenRead or fmShareDenyNone);
 DataList.LoadFromStream(Stream);
finally
 Stream.Free;
end;
Run Code Online (Sandbox Code Playgroud)

通常情况下一切都很完美,但有时会发生服务器或客户端引发异常,因为"该文件正被其他进程使用".我不明白哪个是问题:我尝试了很多替代方案,但这也可能只发生在服务器上,只有一个客户端正在运行..

有任何想法吗?

谢谢!

delphi share file process

5
推荐指数
1
解决办法
2574
查看次数

标签 统计

delphi ×2

file ×2

mutex ×1

process ×1

python ×1

share ×1

windows ×1

xml ×1