Tôi đã cố khóa một tệp để các dịch vụ nhân bản khác không thể truy cập tệp. Sau đó tôi đọc tệp, rồi di chuyển tệp khi hoàn tất. Di chuyển được cho phép bằng cách sử dụng FileShare.Delete
.Hành vi khóa khác với mạng chia sẻ
Tuy nhiên trong thử nghiệm sau này, chúng tôi nhận thấy rằng phương pháp này không hoạt động nếu chúng ta đang xem xét chia sẻ mạng. Tôi đánh giá cao cách tiếp cận của tôi có thể không phải là tốt nhất, nhưng câu hỏi cụ thể của tôi là:
Tại sao bản trình diễn bên dưới hoạt động với tệp cục bộ chứ không phải chống lại tệp mạng?
Cụ thể hơn, bạn có thể trở nên tốt hơn, vì tôi đã tìm thấy rất ít thông tin trong các tìm kiếm cho biết chia sẻ mạng hoạt động khác với các ổ đĩa cục bộ.
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: Cần lưu ý rằng nếu bạn muốn di chuyển tệp từ một chia sẻ mạng, sang một mạng khác trong khi khóa được bật, tính năng này hoạt động. Sự cố chỉ xảy ra khi di chuyển một tệp trong phạm vi cùng một chia sẻ tệp trong khi tệp bị khóa.
Kiểm tra xem bạn có quyền ghi vào thư mục được chia sẻ hay không. – Nayan
Quyền đã được kiểm tra và không sao. Người dùng đang hoạt động có toàn quyền Kiểm soát trên thư mục và Chia sẻ – MattH
Loại hệ điều hành nào cung cấp chia sẻ? –