ファイルを読み取り、リストに文字列の一部を追加してこのリストを返す関数があります。誰も何も変更したり、削除したり、現在読んでいるファイルが何であれ、それをロックしたかったので。すべてが大丈夫だった、私はどういうわけかこのようにそれをしました:
public static List<string> Read(string myfile)
{
using (FileStream fs = File.Open(myfile, FileMode.Open, FileAccess.Read, FileShare.None))
{
//read lines, add string to a list
//return list
}
}
それはいいです。これで、別のクラスに別の関数があり、リストを処理したり、他の関数を呼び出したりします。今、時々私は私が読んでいたファイルを移動したいです。そして、ここに問題があります。Imは新しい関数にあり、関数Read(string myfile)
はすでに処理されているため、ファイルにロックはありません。
//in another class
public static void DoStuff(/*somefile*/)
{
List<string> = Read(/*somefile*/);
//the file (somefile) is not more locked!
//do stuff
if (something)
Move(/*somefile*/) //could get an error, file maybe not more there or changed...
}
したがって、別の関数/ユーザーがファイルを変更したり、名前を変更したり、削除したりする可能性があります=>このファイルを移動できません。または、変更したファイルを移動しますが、それはできません。スレッドを使用すると、同じ機能を持つ別のスレッドがファイルを再度ロックする可能性があり、ファイルを移動できませんでした。
そのため、どういうわけかこのファイルを長時間ロックする必要があります。簡単な方法はありますか?using (FileStream fs = File.Open(myfile, FileMode.Open, FileAccess.Read, FileShare.None)
または、コードを置き換える必要がありますか?助言がありますか?ありがとうございました