我一直在尝试锁定文件,以便其他克隆服务无法访问该文件。然后我读取文件,然后在完成后移动文件。使用 允许移动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);
}
编辑:值得一提的是,如果您希望在锁定到位时将文件从一个网络共享移动到另一个网络共享,这是可行的。只有在锁定同一文件共享时移动文件时才会出现此问题。