Я пытался заблокировать файл так, чтобы другие клонированные сервисы не могли получить доступ к файлу. Я затем считал файл и затем перемещаю файл по окончании. При помощи Перемещения позволяют FileShare.Delete
.
Однако в более позднем тестировании, мы нашли, что этот подход не работает, если мы смотрим на сетевой ресурс. Я ценю свой подход, могло не быть лучшим, но мой конкретный вопрос:
Почему делает ниже демонстрационной работы против локального файла, но не против сетевого файла?
Чем более конкретны можно быть, тем лучше, поскольку я нашел очень мало информации в своих поисках, которая указывает, сетевые ресурсы ведут себя по-другому к локальным дискам.
string sourceFile = @"C:\TestFile.txt";
string localPath = @"C:\MyLocalFolder\TestFile.txt";
string networkPath = @"\\MyMachine\MyNetworkFolder\TestFile.txt";
File.WriteAllText(sourceFile, "Test data");
if (!File.Exists(localPath))
File.Copy(sourceFile, localPath);
foreach (string path in new string[] { localPath, networkPath })
{
using (FileStream fsLock = File.Open(path, FileMode.Open, FileAccess.ReadWrite, (FileShare.Read | FileShare.Delete)))
{
string target = path + ".out";
File.Move(path, target); //This is the point of failure, when working with networkPath
if (File.Exists(target))
File.Delete(target);
}
if (!File.Exists(path))
File.Copy(sourceFile, path);
}
Править: Стоит упомянуть, что, если Вы хотите переместить файл от одного сетевого ресурса к другому сетевому ресурсу, в то время как блокировка существует, это работает. Проблема только, кажется, происходит при перемещении файла в той же доле файла, в то время как это заблокировано.