Seaside:CannotDeleteFileException:无法删除旧版本的燃料文件

Jay*_*ade 2 smalltalk seaside pharo

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

FLSerializer
    serialize: self allObjects
    toFileNamed: self name , '.fl'**
Run Code Online (Sandbox Code Playgroud)

并获得例外:

CannotDeleteFileException:无法删除旧版本的文件...\Pharo3.0\Test.fl

我已经使用Mutex允许在第一个实例之后执行另一个实例,

mutexBlock := Mutex new.
mutexBlock critical: [
    FLSerializer
        serialize: self allObjects
        toFileNamed: self name , '.fl' ]
Run Code Online (Sandbox Code Playgroud)

但我仍然得到同样的错误

CannotDeleteFileException:无法删除旧版本的文件

请有人帮我解决这个错误.

Max*_*ske 5

你的直觉可能是正确的:两个进程试图同时写入(删除)同一个文件.但是,您的Mutex方法无效,因为Mutex每次执行该代码时都会创建一个新方法.你必须存储Mutex在一个类或实例变量(取决于你的代码是如何工作的),使得每一个进程都将使用同一个实例Mutex.

您的代码看起来像这样:

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

self class serializeProtect critical: [
    FLSerializer
        serialize: self allObjects
        toFileNamed: self name , '.fl' ]
Run Code Online (Sandbox Code Playgroud)

注:一般是不会安全初始化一个Mutex懒洋洋地.我只是为了简单起见而在这里做.