C#.NETでは、ファイルを別の場所にコピーし、ソースファイルが既存のファイルよりも新しい場合(後で「変更日」にする)、既存のファイルを上書きする方法ソースファイルが古い場合は?ファイルをコピーし、新しいファイルを上書きする場合
答えて
あなたはFileInfo
classを使用することができますし、それがプロパティとメソッドです:バッチファイルで
FileInfo file = new FileInfo(path);
string destDir = @"C:\SomeDirectory";
FileInfo destFile = new FileInfo(Path.Combine(destDir, file.Name));
if (destFile.Exists)
{
if (file.LastWriteTime > destFile.LastWriteTime)
{
// now you can safely overwrite it
file.CopyTo(destFile.FullName, true);
}
}
あなたがたFileInfoクラスを使用することができます。
FileInfo infoOld = new FileInfo("C:\\old.txt");
FileInfo infoNew = new FileInfo("C:\\new.txt");
if (infoNew.LastWriteTime > infoOld.LastWriteTime)
{
File.Copy(source path,destination path, true) ;
}
、これは動作します:
XCopy "c:\my directory\source.ext" "c:\my other directory\dest.ext" /d
はい。しかし、パスのスペースなどを扱わなければならないので、おそらくトリッキーです。 –
バッチファイルを使うと、ファイルパスの前後に一重引用符や二重引用符を置くことができます。 – JMK
ここに私の答えがあります:コピーはフォルダの内容を移動しません。ターゲットが存在しない場合、コードは読みやすくなります。技術的には、存在しないファイルのfileinfoを作成するとLastWriteTimeがDateTime.Minになるので、はになりますが、読みやすさには少し不足します。このテスト済みのコードが誰かを助けてくれることを願って
**編集:自分のソースを更新して、はるかに柔軟になるようにしました。このスレッドに基づいていたので、私はここに更新を掲載しました。マスクを使用する場合、サブディレクトリは作成されません。の場合、サブフォルダには一致するファイルが含まれません。確かに、より頑強なエラーハンドラがあなたの将来にあります。 :)
public void CopyFolderContents(string sourceFolder, string destinationFolder)
{
CopyFolderContents(sourceFolder, destinationFolder, "*.*", false, false);
}
public void CopyFolderContents(string sourceFolder, string destinationFolder, string mask)
{
CopyFolderContents(sourceFolder, destinationFolder, mask, false, false);
}
public void CopyFolderContents(string sourceFolder, string destinationFolder, string mask, Boolean createFolders, Boolean recurseFolders)
{
try
{
if (!sourceFolder.EndsWith(@"\")){ sourceFolder += @"\"; }
if (!destinationFolder.EndsWith(@"\")){ destinationFolder += @"\"; }
var exDir = sourceFolder;
var dir = new DirectoryInfo(exDir);
SearchOption so = (recurseFolders ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
foreach (string sourceFile in Directory.GetFiles(dir.ToString(), mask, so))
{
FileInfo srcFile = new FileInfo(sourceFile);
string srcFileName = srcFile.Name;
// Create a destination that matches the source structure
FileInfo destFile = new FileInfo(destinationFolder + srcFile.FullName.Replace(sourceFolder, ""));
if (!Directory.Exists(destFile.DirectoryName) && createFolders)
{
Directory.CreateDirectory(destFile.DirectoryName);
}
if (srcFile.LastWriteTime > destFile.LastWriteTime || !destFile.Exists)
{
File.Copy(srcFile.FullName, destFile.FullName, true);
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message + Environment.NewLine + Environment.NewLine + ex.StackTrace);
}
}
これは再帰的ではありませんコール。 (これはウィキッドにする必要があります) –
これは本当にうまくいきます。私はもう一つの改善を提案します。コピー元とコピー先の両方にファイルが存在する場合にチェックサムテストを追加し、ファイルが同一であればコピーしないようにします。 (VARストリーム=新しいBufferedStream(File.OpenRead(filePathに)、1200000))を使用してパブリック文字GetChecksum(文字列filePathに) {\t \t {\t \t SHA256Managed SHA =新しいSHA256Managed()。 \t \tバイト[]チェックサム= sha.ComputeHash(ストリーム); \t \t戻り値BitConverter.ToString(チェックサム).Replace( " - "、String.Empty); \t} } –
@ChristopherHaws、それは素晴らしいアイデアです。私はそれを折るときに私は分を取得します。 :) –
- 1. Excelファイルの更新、コピー、上書き
- 2. ファイルを上書きしてファイルを上書きする
- 3. 新しいファイル要素がすべて1つのファイルに上書きされた場合、すべての新しいchar要素を書き込む
- 4. バケット間のAWS S3シンクでより新しいコピー先ファイルを上書き
- 5. Gulpがコピー先ファイルを上書きしていません
- 6. ファイルがすでに存在する場合にファイルを上書きする
- 7. ファイルが既に存在する場合にファイルを上書きする方法
- 8. tar over ssh:コピー先のファイル名と場所を設定し、既存のファイルを上書きする
- 9. WebClient.DownloadFileAsyncはファイルがすでにディスク上に存在する場合、ファイルを上書きしますか?
- 10. カラムをコピーし、テキストを追加して新しいCSVファイルに書き込む
- 11. HTMLファイルをWordファイルにコピー - 上書きエラー
- 12. ファイルを正しく上書きする
- 13. FileZilla:ソースフォルダのファイル数が少ない場合は上書きします
- 14. Pythonがファイルを上書きしない
- 15. fs.writeFileファイルを上書きしない
- 16. 1つのファイルから別のファイルに内容をコピーする(存在する場合は上書きしないでください)
- 17. 上書きせずにファイルをコピーする
- 18. 更新プログラム:ファイルを上書きしますか?
- 19. VS PostBuildイベント - 存在する場合はファイルをコピーします
- 20. ファイルとシンボリックリンクを削除してファイルを上書きする
- 21. Uglifyjsはファイルを上書きします
- 22. PERL:入力ファイルに書き込む(元のファイルを上書きしないで)
- 23. AppleScriptファイルを新しいフォルダにコピー
- 24. Gulp書き込みファイルが存在しない場合
- 25. CSVファイルをJavaの新しい値で上書きする方法
- 26. 要件に合致するファイルを新しいフォルダにコピーします。
- 27. BATCHファイルを書き出すときにEXISTが動作しない場合
- 28. SVN:ファイルのサブセットを新しいタグにコピーできますか?
- 29. xcopyを使用して新しいファイルをコピーする方法
- 30. ファイルを保存してJava GUIに存在する場合に上書きします
このWindowsまたはWebのアプローチですか? – user1102001
@ user1102001 windows –
これはバッチファイルで簡単に見つかるかもしれませんが、私はxcopyコマンドがこれを簡単にすると思います。 – JMK