-1

関数を使用したいのFileSystemInfo.Refresh()ですが、この関数を呼び出すとどうなるか知りたいです。

4

2 に答える 2

5

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
于 2013-06-27T05:33:28.880 に答える
0

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() を呼び出します

この質問も確認できます。

于 2013-06-27T05:45:18.650 に答える