C#でファイルのタイムスタンプの比較方法とUSBメモリの影響について

このQ&Aのポイント
  • C#でファイルのタイムスタンプの比較方法について質問があります。
  • USBメモリにコピーしたファイルの中に、同一と判断されないファイルが出てしまう原因がわかりません。
  • 具体的に、プログラムで、NTFSドライブとFATドライブ上のファイルのタイムスタンプを比較する方法について教えてください。
回答を見る
  • ベストアンサー

C# でファイルのタイムスタンプの比較

C# でファイルのタイムスタンプの比較 public class FileList {  long size;  DateTime time;  string name;    : があり、このクラスのファイルを比較するメソッドcmpを作りました。 private int cmp(FileList f) {  return (   (f.size < this.size) ? -1 :   (f.size > this.size) ? 1 :   (f.time > this.time) ? -1 :   (f.time < this.time) ? 1 :   this.name.CompareTo(f.name)); } しかし、USBメモリにコピーしたファイルの中に、同一と判断されないファイルが出てしまいます。原因を調べたら、USBメモリにコピーするときにタイムスタンプが変更するためとわかりました。 http://support.microsoft.com/kb/402160/ja 「奇数秒に作成されたファイルを NTFS パーティションから FAT パーティションにコピーすると、作成日時の繰り上げが発生します。」という記載があり、原因はわかりました。 しかし、後半には、「NTFS ドライブと FAT ドライブ上のファイルのタイムスタンプを比較する場合は、この動作を考慮する必要があります。 」とだけ記載がありますが、具体的に、プログラムで、どのように考慮したらよいのかわかりません。「2秒以内なら同じとみなす」といった処理をすればよい事はわかりますが、ここで詰まっています。ご教示お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

DateTime型を減算するとTimeSpan型で戻ってくるので、 http://msdn.microsoft.com/ja-jp/library/1905yhe2(v=VS.80).aspx その中のTotalSecondsを見ればいいでしょう。 http://msdn.microsoft.com/ja-jp/library/system.timespan.totalseconds(v=VS.80).aspx NTFSとFATの「同じファイル」の比較なら、NTFS→FATコピー時には繰り上げしか発生しないので、実際には「FAT - 2 <= NTFS <= FAT」の場合に同値と看做す、という手法になるかと思います。

usatan2
質問者

お礼

再度応答、ありがとうございます。 つまり、  ((f.time - this.time).TotalSeconds > 2) ? -1 :  ((f.time - this.time).TotalSeconds < -2) ? 1 : ですね。 どちらがFATか不明なので、とりあえず±2秒以内なら同じとみなして、問題なさそうです。ありがとうございました。

その他の回答 (1)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

「timeの差が±2秒以内なら」と考えれば条件式が見えてきませんか?

usatan2
質問者

お礼

応答ありがとうございます。 つまり、 (f.time - this.time > 2秒) ? -1 : (f.time - this.time < -2秒) ? 1 : ですよね。でも、どのように記述するのか、よくわからないんです。 さらには、本当に「2秒誤差で判断して大丈夫」、同一ファイルが異なると判断されることが本当にないのか? についても回答がほしいです。 更なる、ご教示お願いします。

関連するQ&A

  • タイムスタンプを比較するソフト

    重複メールを整理しようと思い、いくつかのツールで試しましたが整理できない重複メールがあります。 (元ファイル名の末尾に連番が付いたもので、サイズやタイムスタンプは同じ) タイムスタンプだけで比較するソフトがありましたら教えて頂けないでしょうか? WinXP Becky2、emlCheck、undupで試しました

  • VBAでタイムスタンプを比較して

    VBAで色々とやろうとしているのですが、以下について教えてください。   c:\Documents\123.doc のタイムスタンプと d:\documents\123.Txt のタイムスタンプを比較して、 c:\Documents\123.doc のタイムスタンプが新しい時だけ、このファイルを d:\documents\123.Txt に上書きする。 その場合、文書は、Txtに変換?する。  特に、タイムスタンプの比較について教えて欲しいので、よろしくお願いします。

  • フォルダ内の、最新のタイムスタンプのファイルを1つだけ取り出す(VBscript)

    フォルダ内に複数のファイルが存在しており、その中でタイムスタンプが一番最新のファイルをコピーしたいと考えているのですが、ファイル同士のタイムスタンプを比較する方法が見つけられませんでした。どなたかご存知の方がいらっしゃいましたら、教えて頂けませんか?

  • タイムスタンプを変えないでコピーする方法

    ホームネットワーク内のPC間で、データをコピーした際、ファイルのタイムスタンプは不変なんですが、 フォルダーのタイムスタンプが変わってしまいます(コピーした時点のタイムスタンプになってしまいます)。 フォルダーのタイムスタンプを変えないようにして、コピーすることは可能でしょうか? ご教示よろしくお願い致します。

  • ファイルやフォルダのタイムスタンプ

    WindowsXPやVistaではファイルやフォルダに 作成日、更新日などのタイムスタンプがあります。 このタイムスタンプはどういう際に付与されるでしょうか? 通常の 新規作成で保存→更新 というのであれば作成日、更新日で理解できます。 ただ、ファイルのコピー、ファイルのダウンロード、圧縮、解凍時も 影響してそうです。 それに時々、作成日が更新日より若いといったことにも出くわします。 もちろん、操作するPCの時間が狂っていたからという理由もなくは ないと思いますが、自分の感覚ではそれ以外の理由が大きく感じています。私が考えている(私の感覚の)、タイムスタンプのつく予想と 大きくかけ離れている気がします。 どなたか詳しい方がいらっしゃいましたら、 "基本的なタイムスタンプの考え方"を教えていただければと思います。 よろしくお願いします。

  • Windowsのファイルシステムについて

    現在多く使われているファイルシステムに FATとNTFSがありますが WindowsNT、2000ではFATとNTFSのどちらかを選択できるのに 95、98シリーズはFATしかできないですよね? FATだとパーティション、ドライの最大サイズが4GBまで しかないし、「200MB 以上のドライブまたはパーティションを 使用する場合は、ボリューム サイズの増加に従って FAT の 性能は低下するので、なるべく FAT ファイル システムを 使わないようにしてください」 とも書いてあるのに何故NTFSがサポートされてないのでしょうか?

  • 保存された同一ファイル名をタイムスタンプで比較

    フォルダAとフォルダBに、同じファイル名のもの100ファイルずつあります。 フォルダAに最新のファイルがあるもの、フォルダBに最新のファイルがあるものと、両方とも同じもの。 という感じで管理がバラバラになってしまっています。 さらにはフォルダAにしかないファイル、フォルダBにしかないファイルが、若干あって、さらに混乱している状態です。 ・フォルダAにあってフォルダBに無いもの。また、その逆。 ・フォルダAとBの両方にある場合、どちらが新しいか。 タイムスタンプ(更新日)で調査できるツールはないでしょうか? AikoWinというフリーツールで、ファイルの有無は確認できました。 http://www.vector.co.jp/vpack/browse/pickup/pw6/pw006112.html テキストを比較するものは多く見つかります。 しかし、タイムスタンプで比較するものが見つからなくて困っています。 よろしくお願いします。

  • Windowsのファイル・フォルダのタイムスタンプ

    Windows10ですが、ファイルやフォルダを作成してもすぐに忘れてしまうことがあります。その理由としてあるディレクトリ(フォルダ)\Aのサブのディレクトリ\A\Bを変更したりしても元のフォルダ\Aのタイムスタンプが変更されないということがあるように思います。ディレクトリの深いところで何らかの更新をするとそれが上のディレクトリのタイムスタンプを更新するというような設定はないのでしょうか。 技術的に難しい感じはしないのですが、そうしない理由は何でしょうか。フォルダを作った日にちをいつまでもキープしておきたいということでしょうか。 また、フォルダをコピーするとコピーした日がスタンプされますね。移動はどうなるでしょうか(実験すればすぐですが)。タイムスタンプの考え方とはどのようなことになるでしょうか。また、タイムスタンプの付け方の設定変更はできないでしょうか。

  • ファイルのタイムスタンプを維持したコピーについて

    先日、所持している外付けハードディスクの1つが認識不可になり、 他の外付けハードディスクが同じようになってしまった際に備えて、 急遽ファイルのバックアップを取ることにしました。 そこで、可能であればファイル・フォルダ共に、 タイムスタンプを維持したままでバックアップをしたい。 ネットで調べた結果、「Fire File Copy」というツールがタイムスタンプ維持のコピーに対応しているそうなので、 それを使ってバックアップを試みました。 しかし、データの転送が遅い遅い…。 作者様のホームページに載っている使用方法を読んだ上で、 メモリのバッファ設定や最大確保量を色々と変えて数回試してみましたが、 最大でも8MB/s程度の速度しか出ませんでした。 ホームページの説明画像には40MB/sとか出ていたのに…。 (http://www.k3.dion.ne.jp/~kitt/pc/sw/ffc/help/index.htm) こうなると、Windows標準のコピーなんかよりもひたすら時間が掛かり、 発熱から、ファイルもハードディスクもイカれないか心配になります…。 約600GBで24時間以上掛かった時は、むしろ逆効果なのではないかと不安になりました…(汗) ……つきましては、どなたか「Fire File Copy」の転送速度を向上させる方法をご存知でしたら、是非とも教えてください…。 また、「Fire File Copy」以外での、タイムスタンプ維持コピーの手段を知っておられましたら、 そちらも合わせてご教授頂けると幸いです…。 [環境] Windows7 Ultimate 32bit DELL INSPIRON 1500 プロセッサ: Core2 Duo 2.40GHz RAMメモリ: 4GB (うち500MBはRAMディスク化) 残り内蔵ハードディスク容量: 約10GB バックアップ元: I・Oデータ製ポータブルハードディスク 640GB (NTFS) バックアップ先: BUFFALO製外付けハードディスク 2TB (NTFS)

  • ディレクトリとファイルを、タイムスタンプを保持したままコピー・移動したい

     Windows95で、タイムスタンプを保持したままディレクトリと ファイルを同時にコピー・移動できるソフトを探しています。 ディレクトリとファイルの2回に分けてやれば出来ないことも ないのですが、ディレクトリだけは普通にやると、 他ドライブへのコピー・移動時はタイムスタンプが変わって しまいます(同ドライブ内へのコピーでも同様)。  Windows95ではディレクトリのタイムスタンプを保持したままの コピーなどは基本的にはできないようですが、何らかの方法で 実現した物が在ればと思います。

専門家に質問してみよう