C # как заблокировать файл - PullRequest
2 голосов
/ 10 февраля 2011

Мы используем приложение, которое читает файл и вставляет в базу данных. По какой-то причине мы устанавливаем время создания на конкретное время. и когда мы создаем файл, приложение берет файл, прежде чем мы даже изменим время создания. Есть ли в любом случае, что мы можем заблокировать файл, пока мы не изменим время его создания.

Ошибка, которую я получаю, находится в File.SetCreationTime, поскольку файл используется другим процессом или файл заархивирован.

//Copy signal file
s = filePath + "s";
newS = targetFullPath2 + "s";
File.Copy(s, newS, true);
//
//new creation ts
dtFileCreation = File.GetCreationTime(s);
//retain creation time
File.SetCreationTime(newS, dtFileCreation);

Пожалуйста, совет.

Ответы [ 2 ]

4 голосов
/ 10 февраля 2011

Распространенным решением для этого является создание файла (и установка его метки времени) в другом каталоге или сначала под другим именем, а затем перемещение или переименование его, когда он будет готов, чтобы другой процесс мог его забрать.Перемещение / переименование является атомарной операцией в NTFS (если, конечно, вы не перемещаете файлы между отдельными разделами).

Например:

s = filePath + "s";
newS = targetFullPath2 + "s";
File.Copy(s, newS + "_", true);    // add the _ so the other process
                                   // doesn’t “see” the file yet

dtFileCreation = File.GetCreationTime(s);
File.SetCreationTime(newS + "_", dtFileCreation);

// We’re done with the file, now rename it to its intended final name
File.Move(newS + "_", newS);
1 голос
/ 10 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...