1

Я разрабатываю небольшой инструмент, и мне нужно снова протестировать заблокированные файлы на системном уровне. Я нахожусь в поиске какого-нибудь небольшого приложения (или какого-то простого метода, который не подходит моему утомленному мозгу), который позволяет мне блокировать и разблокировать файлы по желанию. Что-то вроде Unlocker, но это позволяет мне также заблокировать.

Система Windows. Я ожидаю, что все, что работает под XP, будет работать на остальных ОС этого семейства. Но, несмотря ни на что, конечной целью является Windows 7.

2 ответа2

7

Более 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 Framework. Я перекодирую его на другом языке, если вам нужен собственный двоичный файл, просто спросите в комментариях :)

1

Вот тот же код в 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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .