需要一些有效的方法来锁定/解锁文件

需要一些有效的方法来锁定/解锁文件

我正在开发一个小工具,我需要再次测试系统级锁定文件。我正在寻找一些小应用程序(或者一些我疲惫的大脑想不出的简单方法),让我可以随意锁定和解锁文件。类似于 Unlocker 的东西,但它也允许我锁定。

系统是 Windows。我期望在 XP 下运行的任何程序都能在该系列的其他操作系统上运行。但无论如何,最终目标是 Windows 7。

答案1

更适合 StackOverflow,但我不敢相信这么简单的东西居然不存在。以下是 C# 代码(请随意修改,快速拼凑):

using System;
using System.IO;
using System.Text;
using System.Threading;

class LockFile
{
    public static void Main(String[] args)
    {
        if (args.Length > 2)
        {
            Console.WriteLine("Usage: lockfile <file> <wait_in_ms>");
            Environment.Exit(0);
        }
        string path = args[0];
        try
        {
            File.Open(path, FileMode.Open, FileAccess.Write, FileShare.None);
            Thread.Sleep(int.Parse(args[1]));
        }
        catch (FileNotFoundException e)
        {
            Console.WriteLine("File not found, exiting.");
            Environment.Exit(0);
        }
    }
}

用法:

lockfile c:\somefile.txt 30000

锁定指定文件 30 秒。尝试访问时,您将看到如下消息:

替代文本

以下是需要编译的二进制文件,.NET 框架。如果您需要本机二进制文件,我会用另一种语言重新编码,只需在评论中询问即可 :)

答案2

以下是 PowerShell 中的相同代码(在 PS v4、.NET 4.6、Win 8.1 中测试):

$file = New-Object system.io.fileinfo("C:\Temp\tmp2F7F.tmp")
$stream = $f.Open([system.io.filemode]::Open, [system.io.fileaccess]::Read, [System.IO.FileShare]::None)

并且,作为一行代码:

(New-Object system.io.fileinfo("C:\Temp\tmp2F7F.tmp")).Open(3, 1, 0)

相关内容