fork(1) download
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4.  
  5. namespace ConsoleApplication1
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11.  
  12. //★したいこと
  13. //ディレクトリAとディレクトリBを比較し、ディレクトリAにのみに存在するファイル
  14. //および更新されたファイルの一覧を作成したい。
  15. //ただし、各々の検索ディレクトリに対して相対的に同階層で同名、同サイズなら同一ファイルとみなす。
  16.  
  17. //★前提条件
  18. //c:\test\dira\doc1.txt(3byte)
  19. //c:\test\dira\doc2.txt(3byte)
  20. //c:\test\dira\doc3.txt(3byte)
  21. //c:\test\dirb\doc1.txt(3byte)
  22. //c:\test\dirb\doc2.txt(3byte)
  23. //c:\test\dirb\sub\doc3.txt(3byte)
  24.  
  25. //★期待する結果
  26. //c:\test\dira\doc3.txt
  27.  
  28. string basePath1 = @"c:\test\dirA";
  29. string basePath2 = @"c:\test\dirB";
  30.  
  31. DirectoryInfo d1 = new DirectoryInfo(basePath1);
  32. DirectoryInfo d2 = new DirectoryInfo(basePath2);
  33.  
  34. var files1 = from file1 in d1.EnumerateFiles("*", SearchOption.AllDirectories)
  35. select new KurabetaiFile(d1, file1);
  36.  
  37. var files2 = from file2 in d2.EnumerateFiles("*", SearchOption.AllDirectories)
  38. select new KurabetaiFile(d2, file2);
  39.  
  40. var queryList1Only = files1.Except(files2);
  41. foreach (var file in queryList1Only)
  42. {
  43. Console.WriteLine(String.Format("DirAにのみ存在:{0}", file.FullName));
  44. }
  45. }
  46. }
  47.  
  48. public class KurabetaiFile
  49. {
  50.  
  51. private FileInfo f;
  52. private int hc;
  53.  
  54. public string FullName { get { return f.FullName; } }
  55.  
  56. public KurabetaiFile(DirectoryInfo dir, FileInfo file)
  57. {
  58. f = file;
  59. hc = file.FullName.Substring(dir.FullName.Length).GetHashCode();
  60. }
  61.  
  62. public override int GetHashCode()
  63. {
  64. return hc;
  65. }
  66.  
  67. public override bool Equals(object obj)
  68. {
  69. var _obj = obj as KurabetaiFile;
  70. return (_obj == null) ? false : (f.Length == _obj.f.Length);
  71. }
  72. }
  73. }
  74.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty