创建了损坏的 TXT 或 INI 文件?

创建了损坏的 TXT 或 INI 文件?

偶尔我们会收到客户关于文件损坏的报告。这种情况很少见,而且几乎不可能重现。当我们远程登录客户的计算机时,我们发现无法打开该文件(通常是 INI 文件)。也无法将该文件复制到本地进行分析。根据有限的示例,这些损坏的文件大小为“0kB”,只能删除。当这种情况发生时,似乎只会影响数十个 INI 文件中的一个。系统的其余部分都很好。一旦重新创建损坏的文件,系统就会完全恢复。

我们不知道这是怎么发生的,希望能够重现并解决该问题。可能是 Windows 问题、编码错误,甚至是与意外关闭机器有关的硬件问题。出于测试目的,我创建了一个包含随机垃圾的 TXT 文件,如下所示:

// Delphi code, but applies to any language
procedure TfrmDiagnostics.CreateCorruptFile();
var
    fpDump: TextFile;
    nChar: Integer;
begin
    RandSeed := (GetTickCount() mod 23);
    AssignFile(fpDump, 'C:\Corrupted.txt');
    for nChar:=1 to 100 do
        Write(fpDump, Chr(Random(250)));

    Flush(fpDump);
    CloseFile(fpDump);
end;

这确实会生成一个非常混乱的文件,前几个字节是:NREâA#»Bâ÷lÁb…ilL('—ØÏD YL&d.... 但该文件仍然可以在 Notepad++ 和我尝试过的其他几个 ASCII 编辑器中打开。

是否有可能在 Windows 中创建一个真正“损坏”的文件,Windows 拒绝打开该文件?这可能涉及修改文件分配表,但我怀疑用户是否有访问 FAT 的权限(而且这样做听起来也不安全)。

答案1

无法打开文件的原因不是因为文件已损坏,而是因为文件上有写锁。

这意味着文件打开时网络连接被切断,并且服务器保持锁处于活动状态。

如果您Computer Management在服务器上打开并取消锁定以打开文件,您应该找到对这些 .ini 文件的引用,并能够删除锁,之后您可以再次对该文件执行任何操作。

要重现这种情况,请创建一个文件或打开一个现有文件。写入文件。执行此操作时,请断开 PC 与网络的连接,然后重新连接。文件将损坏,无法以您之前遇到的类似方式打开。

现在,找出网络断开的原​​因。例如,在使用组策略时,请注意组策略大约每 90 分钟刷新一次。如果您将共享设置为替换,它将删除该共享,并以几分钟的随机间隔每 90 分钟重新创建一次。如果您在此时写入文件,则文件可能会损坏。

相关内容