Próbowałem zablokować plik, aby inne sklonowane usługi nie mogły uzyskać dostępu do pliku. Następnie odczytuję plik, a następnie przenoszę plik po zakończeniu. Ruch jest dozwolony przy użyciu FileShare.Delete
.Zachowanie blokowania różni się za pomocą udziałów sieciowych
Jednak w późniejszych testach okazało się, że to podejście nie działa, jeśli patrzymy na udział sieciowy. Rozumiem, że moje podejście mogło nie być najlepsze, ale moje konkretne pytanie brzmi:
Dlaczego poniższe demo działa na plik lokalny, ale nie na plik sieciowy?
Im dokładniej możesz być tym lepszy, ponieważ w moich poszukiwaniach znalazłem bardzo mało informacji wskazujących, że udziały sieciowe zachowują się inaczej niż dyski lokalne.
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);
}
EDIT: Warto wspomnieć, że jeśli chcesz przenieść plik z jednego udziału sieciowego, aby innym udziale sieciowym, kiedy blokada jest na miejscu, to działa. Problem pojawia się tylko podczas przenoszenia pliku w ramach tego samego udziału pliku, gdy jest on zablokowany.
Sprawdź, czy masz uprawnienia do zapisu w folderze udostępnionym. – Nayan
Uprawnienia zostały sprawdzone i są w porządku. Aktywny użytkownik ma pełną kontrolę nad katalogiem i współdzieleniem – MattH
Jaki rodzaj systemu operacyjnego zapewnia udział? –