gpt4 book ai didi

smalltalk - Seaside:CannotDeleteFileException:无法删除旧版本的燃油文件

转载 作者:行者123 更新时间:2023-12-02 23:52:21 24 4
gpt4 key购买 nike

在 pharo Seaside 应用程序中,单击主页按钮上的所有数据将保存在燃料文件中,类名称为 Test.fl。如果我在两个实例中一次调用同一个主页,则两者都会调用下面的代码来保存包含最新更新的 Test.fl 文件,

FLSerializer
serialize: self allObjects
toFileNamed: self name , '.fl'**

并获得异常:

CannotDeleteFileException: Could not delete the old version of file ...\Pharo3.0\Test.fl

我使用互斥体来允许在第一个实例之后执行另一个实例,

mutexBlock := Mutex new.
mutexBlock critical: [
FLSerializer
serialize: self allObjects
toFileNamed: self name , '.fl' ]

但我仍然遇到同样的错误

CannotDeleteFileException: Could not delete the old version of file

请任何人帮助我解决这个错误。

最佳答案

您的直觉可能是正确的:两个进程正在尝试同时写入(删除)同一个文件。您的Mutex但是,该方法将不起作用,因为您创建了一个新的 Mutex每次执行该代码时。您必须存储 Mutex在类或实例变量中(取决于您的代码的工作方式),以便每个进程都将使用 Mutex同一个实例 .

您的代码将如下所示:

MyClass class>>serializeProtect
^ SerializeProtect ifNil: [ SerializeProtect := Mutex new ]

self class serializeProtect critical: [
FLSerializer
serialize: self allObjects
toFileNamed: self name , '.fl' ]

注意:初始化 Mutex 通常安全。懒洋洋。我只是为了简单起见在这里这样做。

关于smalltalk - Seaside:CannotDeleteFileException:无法删除旧版本的燃油文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37260768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com