如何设置文件权限以防止其他人以独占方式锁定我的文件

本文关键字:文件 其他人 方式 我的 锁定 设置 何设置 权限 | 更新日期: 2025-03-16 10:11:04

我想使用C#/在Windows 7主机上打开文件进行追加。NET。为此,我想使用常用的文件输出操作。我找到了这样的解决方案:

FileStream trace_fd = new FileStream(r"c:'temp'testlog.txt", 
                                     FileMode.Append, 
                                     FileAccess.Write, 
                                     FileShare.ReadWrite)

即使上面第行的程序已经启动并正在运行,我的跟踪文件也是可读的。我没有例外,文件被另一个进程使用了,正确的代码如下:

FileStream good_logreader_fd = new FileStream("c:'temp'testlog.txt", 
                                              FileMode.Read, 
                                              FileAccess.Read,
                                              FileShare.ReadWrite)

然后我有另一个程序(有缺陷的日志扫描仪)与这样的行:

FileStream bad_logreader_fd = new FileStream("c:'temp'testlog.txt", 
                                             FileMode.Read, 
                                             FileAccess.Read, 
                                             FileShare.None)

这样的行显然是日志扫描程序的一个错误。如果我的程序没有运行,那么有缺陷的logscaner将获得独占锁定,并且我的程序的后续运行将无法获得跟踪文件的fd。

我的问题是,我能做些什么来防止这种可怕的情况发生。例如,我可以为跟踪文件设置文件权限以防止任何人使用独占锁吗?如果是,那么怎么做?还有什么可以保护我的程序不受日志扫描程序问题的影响吗?请注意,我必须在程序运行之间保持相同的跟踪文件名。

如何设置文件权限以防止其他人以独占方式锁定我的文件

您不能设置权限以允许对文件进行任何访问,但可以以某种方式限制FileShare。无,因为文件共享模式与访问权限无关。

权限授予进程(基于其运行的帐户)访问文件/资源的权限。若被授予访问权限的进程可以用它想要的任何共享模式打开文件。如果此共享模式与现有共享模式不冲突,则文件请求成功,现在文件将具有此共享模式(与以前的共享模式相结合)。有关详细信息,请参见CreateFile-dwShareMode部分。

在您的情况下,日志读取器需要具有打开文件的权限,这样它才能设置ShareMode。如果它是第一个打开文件的进程,则无。正如devshorts所说,除了改变违规流程或破解文件访问方法(搜索"hook CreateFile")之外,你无能为力。

附带说明:如果您的日志读取器与其他进程在同一帐户下运行,则权限将没有帮助,因为Windows中没有"每个进程"权限,所有进程都将共享相同的用户权限。

据我所知,你无法阻止其他人在不修改代码的情况下尝试以另一种文件访问模式打开文件。