Я создал утилиту для блокировки файлов lockfile.exe
, которая принимает два параметра: fileName (файл должен быть заблокирован) и fileShare (общий ресурс, который будет применен).Затем я вызываю эту утилиту из другого приложения, чтобы проверить условия ошибок при обработке заблокированных файлов.Утилита lockfile.exe
блокирует файл с указанным общим ресурсом, а затем ожидает ввода любого символа для снятия блокировки и выхода.
В моем тестовом приложении я создал класс FileLocker
с двумя методами LockFile
иUnlockFile
следующим образом:
public class FileLocker
{
private Process process;
public void LockFile(string fileName)
{
this.process = new Process();
this.process.StartInfo.RedirectStandardInput = true;
this.process.StartInfo.UseShellExecute = false;
this.process.StartInfo.CreateNoWindow = true;
this.process.StartInfo.FileName = "lockfile.exe";
this.process.StartInfo.Arguments =
"\"" + fileName + "\" " + FileShare.Read.ToString();
this.process.Start();
}
public void UnlockFile()
{
this.process.StandardInput.Write('X');
this.process.StandardInput.Flush();
this.process.WaitForExit();
this.process.Close();
}
}
Когда я вызываю метод LockFile
, процесс сразу после запуска завершается.Он не ожидает ввода в UnlockFile
.Когда я не перенаправляю стандартный ввод, тогда процесс ожидает ввода с клавиатуры.
Что мне нужно изменить / исправить, чтобы процесс не сразу завершился.Мне нужно, чтобы он дождался ввода, введенного в UnlockFile
, и только после этого должен завершиться процесс?
Обновление:
Обновлен, чтобы показать FileLocker
класс выше ипредоставить пример звонков ниже:
class Program
{
static void Main(string[] args)
{
FileLocker locker = new FileLocker();
locker.LockFile("HelloWorld.txt");
locker.UnlockFile();
}
}