関数を使用したいのFileSystemInfo.Refresh()
ですが、この関数を呼び出すとどうなるか知りたいです。
2 に答える
MSDN - FileSystemInfo.Refresh
オブジェクトの状態を更新します。
呼び出す理由は、ファイルの「最新」のプロパティを取得するためです。ディスク上で情報が更新された場合、元のオブジェクトのデータが古い可能性があります。つまり、MSDN は属性のケースを明示的に呼び出します。
属性情報を取得する前に、Refresh を呼び出す必要があります。
古さを示すサンプル:
// create a file at this location
var fileName = @"E:\Temp\attr.txt";
var fi = new FileInfo(fileName);
Console.WriteLine("Attributes: {0}", fi.Attributes); // Archive
var fi2 = new FileInfo(fileName);
fi2.Attributes = fi2.Attributes | FileAttributes.ReadOnly;
Console.WriteLine("New Attributes: {0}", fi2.Attributes); // Archive, ReadOnly
Console.WriteLine("Stale attributes: {0}", fi.Attributes); // Archive
fi.Refresh();
Console.WriteLine("Refreshed attributes: {0}",fi.Attributes);// Archive, ReadOnly
MSDNから;
FileSystemInfo.Refresh は、現在のファイル システムからファイルのスナップショットを取得します。
属性情報を取得する前に Refresh を呼び出す必要があります。そうしないと、情報が古くなります。
File.FillAttributeInfo
内部メソッドであることが明示的に使用されます。
public void Refresh()
{
this._dataInitialised = File.FillAttributeInfo(this.FullPath, ref this._data, false, false);
}
File.FillAttributeInfo(String, WIN32_FILE_ATTRIBUTE_DATA&, Boolean, Boolean)
メソッドの動作を確認できます。
https://stackoverflow.com/a/1448727/447156から
FileInfo 値は 1 回だけ読み込まれ、その後キャッシュされます。現在の値を取得するには、プロパティを取得する前に Refresh() を呼び出します
この質問も確認できます。