我在 Linux 系统上使用 Netbeans 7.0.1。
我有一个文件
module/test.php
另一个
application/module/test.php
两个test.php
文件都是彼此的硬链接。
application/module/test.php
当我在 Netbeans 中更改时,它module/test.php
没有更新。但它应该更新。
我认为 Netbeans 会删除 test.php 并创建一个新的?
我相信在 Netbeans 6 中不会发生这种情况。
我该如何解决这个问题?是否有任何隐藏选项可以恢复旧行为?
答案1
文本编辑器更新(保存)文件的正确方法是在同一目录中创建一个具有临时名称的新文件,在其中写入新内容,然后删除旧文件并将新文件重命名为其真实名称。
原因:如果您正在就地重写文件,任何灾难性故障(断电、磁盘坏扇区等)都可能导致此文件损坏或仅部分写入。因此,任何理智的编辑器都不会进行就地写入。我很惊讶 NetBeans 在旧版本中做到了这一点。
当然,这种删除/重命名方法并不知道您的硬链接,并且在整个磁盘上搜索文件的其他硬链接是不可能的,所以没有编辑器会这样做。
我认为您无法获得旧的行为,即使可以,这也是一个很糟糕的想法。如果您无法切换到软链接(不受此问题影响),我想您必须寻找其他方法来完成您正在做的事情。
答案2
据我所知,Netbeans 无法设置为执行“单阶段”保存,而这正是您所要求的。它执行的是“两阶段”保存。
可以做到这一点的编辑器是j编辑,如果有帮助的
话。以下是保存文件jEdit 手册的部分:
两阶段保存
为了防止在保存文件过程中 jEdit 崩溃(这种情况不太可能发生)导致数据丢失,文件首先被保存到名为 #filename#save# 的临时文件中。如果此操作成功,则原始文件将被临时文件替换。
但是,在某些情况下,这种行为是不可取的。例如,在 Unix 上,这会创建一个新的 i 节点,因此虽然 jEdit 保留文件权限,但文件的所有者和组会被重置,并且如果是硬链接,则链接已断开。可以在“实用程序”>“全局选项”对话框的“常规”窗格中禁用“两阶段保存”功能;请参阅“通用窗格”部分。