他の複製されたサービスがファイルにアクセスできないように、ファイルをロックしようとしています。次に、ファイルを読み取り、終了したらファイルを移動します。移動は、を使用して許可され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);
}
編集:ロックが設定されている間にファイルをあるネットワーク共有から別のネットワーク共有に移動したい場合は、これが機能することを言及する価値があります。この問題は、ファイルがロックされているときに同じファイル共有内でファイルを移動した場合にのみ発生するようです。