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. WebClient.DownloadFileAsyncはファイルがすでにディスク上に存在する場合、ファイルを上書きしますか?
- 2. fs.writeFileファイルを上書きしない
- 3. FileZilla:ソースフォルダのファイル数が少ない場合は上書きします
- 4. 上書きせずにファイルをコピーする
- 5. VS PostBuildイベント - 存在する場合はファイルをコピーします
- 6. ファイルとシンボリックリンクを削除してファイルを上書きする
- 7. AppleScriptファイルを新しいフォルダにコピー
- 8. SVN:ファイルのサブセットを新しいタグにコピーできますか?
- 9. xcopyを使用して新しいファイルをコピーする方法
- 10. htaccessファイルに上書きしますか?
- 11. Spring Batch Admin UI - ファイルのアップロード場所を上書きする
- 12. のWindows - 親ディレクトリが存在しない場合にのみ、ファイルをコピーする
- 13. ファイルの一部を選択してLinuxの新しいファイルにコピーする
- 14. 更新されたファイルでディレクトリを上書きする方法
- 15. 新しいファイルにテキストを読み書きする - Matlab
- 16. 現在のコピーを使用している場合は、ファイルのシャドウコピーを開く
- 17. 新しいファイルに一致する行をコピーする
- 18. Windows:ファイルを上書きする
- 19. バンドル設定ファイルを上書きする
- 20. Node.jsのファイルを上書きする
- 21. gettext .moファイルを上書きする
- 22. django - default_storage.save()でファイルを上書きする
- 23. 既存のファイルを上書きする
- 24. xmlファイル#2を上書きする
- 25. Pythonは新しいディレクトリにファイルをコピーし、ファイル名がすでに存在する場合は名前を変更します
- 26. Wise Installerでファイルを上書きしないでください。
- 27. ファイルの作成時にファイルを上書きしないでください。
- 28. PHP fgetcsv()を検索してファイルを上書きする
- 29. FILE文を使用してファイルのテキストを上書きする
- 30. ファイルを上書きしないでバイトを書き込む方法
このWindowsまたはWebのアプローチですか? – user1102001
@ user1102001 windows –
これはバッチファイルで簡単に見つかるかもしれませんが、私はxcopyコマンドがこれを簡単にすると思います。 – JMK