私は知っていますが、この質問は既に多くの場所で繰り返し尋ねられています。しかし、私はそれをgoogleにしようとしたが、このサイトを解決するためにチェックしたが、まだまだ短くなっている。私はまだすべての提案されたソリューションを使用した後でもこの問題に遭遇しています。ファイルが別のプロセスで使用されているためにファイルにアクセスできません
基本的に2つのプログラムがあります。各プログラムの機能は以下のようなものです。
- PROGRAMA - 機能:常時ソースファイル(TXT)
- ProgramB *にアップデート - 機能:常に先の場所にソースファイルをコピーします。
ProgramBを使用して、ctrl + c操作をシミュレートする必要があります。したがって、私はファイルを更新することでどこにアーカイブするかを検討しており、オペレータはそれをコピーすることもできます。
これまで私が試したことはこれです。以下は、機能をテストするサンプルプログラムです。
PROGRAMA
static void Main(string[] args)
{
// just prepare the data
List<string> tempList = new List<string>();
for(int i = 0; i < 50000; i++)
{
tempList.Add(string.Format("xxx_{0}", i.ToString()));
}
try
{
// just to simulate constart update
for (int j = 0; j < 20000; j++)
{
using (FileStream file = new FileStream(tmpFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
{
using (StreamWriter sw = new StreamWriter(file))
{
foreach (string tmpName in tempList)
{
sw.WriteLine(tmpName);
}
sw.Close();
}
file.Close();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
Console.ReadKey();
}
}
ProgramB
static void Main(string[] args)
{
string source = @"C:\temp\test.txt";
string dest = @"C:\temp\dest\test.txt";
while (true)
{
try
{
File.Copy(source, dest, true);
}
catch (Exception ex)
{
Console.WriteLine(ex);
Console.ReadKey();
}
}
}
ファイルが開かれているか、別のプログラムがそれを使用しているかどうかは分かりますか?あなたができることは、それが開かれているかどうかを確認するために追加することです – Zaki
うーん。おそらく私はそうすることができます。または、FileStreamファイル=新しいFileStream(tmpFilePath、FileMode.OpenOrCreate、FileAccess.ReadWrite、FileShare.ReadWrite)でキャッチIO例外を実行しますか? – nonadoes
はいそうでもあります – Zaki