タイムスタンプを変更せずにファイルをコピー/ペーストまたは移動できる.Netライブラリを知っている人はいませんか。私が探している機能はrobocopy.exeというプログラムに含まれていますが、このバイナリを共有することなくこの機能を利用したいと思います。タイムスタンプを保存したままファイルを移動/コピーするネットライブラリ
思考?
タイムスタンプを変更せずにファイルをコピー/ペーストまたは移動できる.Netライブラリを知っている人はいませんか。私が探している機能はrobocopy.exeというプログラムに含まれていますが、このバイナリを共有することなくこの機能を利用したいと思います。タイムスタンプを保存したままファイルを移動/コピーするネットライブラリ
思考?
public static void CopyFileExactly(string copyFromPath, string copyToPath)
{
var origin = new FileInfo(copyFromPath);
origin.CopyTo(copyToPath, true);
var destination = new FileInfo(copyToPath);
destination.CreationTime = origin.CreationTime;
destination.LastWriteTime = origin.LastWriteTime;
destination.LastAccessTime = origin.LastAccessTime;
}
あなたはを読んで、そこにあるすべてのタイムスタンプ、FileInfo
クラスを使用して書き込むことができます。
あなたが読むことができるはずです必要な値を変更し、変更を加えて以前の値を復元するFileInfoのプロパティを使用します。管理者権限を持たない
実行 コピーされた読み取り専用のファイルのタイムスタンプを設定しようとすると、既存の読み取り専用のファイルを上書きしようとするとき、または(UnauthorizedAccessException)が例外をスローしますロイの答え。
次の解決方法は、Royの回答に基づいていますが、読み取り専用ファイルを上書きし、コピーされた読み取り専用ファイルのタイムスタンプを変更しながら、ファイルの読み取り専用属性をすべて保持しながら管理権限なしで実行します。
public static void CopyFileExactly(string copyFromPath, string copyToPath)
{
if (File.Exists(copyToPath))
{
var target = new FileInfo(copyToPath);
if (target.IsReadOnly)
target.IsReadOnly = false;
}
var origin = new FileInfo(copyFromPath);
origin.CopyTo(copyToPath, true);
var destination = new FileInfo(copyToPath);
if (destination.IsReadOnly)
{
destination.IsReadOnly = false;
destination.CreationTime = origin.CreationTime;
destination.LastWriteTime = origin.LastWriteTime;
destination.LastAccessTime = origin.LastAccessTime;
destination.IsReadOnly = true;
}
else
{
destination.CreationTime = origin.CreationTime;
destination.LastWriteTime = origin.LastWriteTime;
destination.LastAccessTime = origin.LastAccessTime;
}
}
宛先ファイルがすでに存在するときに正しい値を取得するために 'destination'で' Refresh'を呼び出す(または後で作成する)必要はありませんか? –
@Paul Ruane:あなたが正しいです - 私はそれに応じて答えを更新しました、ありがとう。 –