Precisa de algum método eficiente para bloquear / desbloquear arquivos

1

Estou desenvolvendo uma pequena ferramenta e preciso testá-la novamente em arquivos bloqueados no nível do sistema. Estou em busca de algum pequeno aplicativo (ou algum método fácil que meu cérebro cansado não está criando) que me permita bloquear e desbloquear arquivos à vontade. Algo como Unlocker, mas isso também me permite bloquear.

O sistema é o Windows. Espero que qualquer coisa que funcione no XP funcione nos demais SOs dessa família. Mas, para tudo o que importa, o objetivo final é o Windows 7.

    
por A Dwarf 17.10.2009 / 04:02

2 respostas

7

Mais StackOverflow é voltado, mas não posso acreditar que algo tão simples já não exista. Aqui está o código C # (fique à vontade para modificá-lo, hackeado em conjunto rápido):

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);
        }
    }
}

Uso:

lockfile c:\somefile.txt 30000

bloqueia o arquivo especificado por 30 segundos. Ao tentar acessá-lo, você receberá uma mensagem como esta:

Aqui está um binário compilado, o framework .NET requerido. Vou recodificá-lo em outro idioma se você precisar de um binário nativo, basta perguntar nos comentários:)

    
por 17.10.2009 / 04:51
1

Aqui está o mesmo código no PowerShell (testado no 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)

E como um verso:

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