2011-06-26 4 views
0

ファイルシステムマネージャモジュールを開発しています。もっと速いものファイルの名前を変更する、ファイル内の属性を変更する、フォルダ間でファイルを移動する

これはNTFSのWindowsマシン上にあります。

モジュールは、特定のディレクトリに作成された新しいファイルについて別のモジュールに通知し、このファイルの状態を維持する必要があるため、処理済みのファイルを削除することができ、失敗した場合、再度処理されます。

私は、状態が変わったときにディレクトリ間でファイルを移動したり、状態に応じてファイルの名前を変更したり、ファイルの属性を状態の記号として変更したりすることを考えました。

私は、短時間で大量のファイルを作成できる可能性を考慮して、最も効率的なアプローチが何かを考えています。

答えて

3

私は完全にあなたの質問に答えることはできませんが、いくつかの一般的なヒントを教えてください。その中で最も重要なのは、あなたの質問に対する答えは、基本的なファイルシステム(NTFS、FAT32など)に大きく依存する可能性があります。

一般に、同じパーティション上のファイルの名前を変更または移動すると、ディレクトリエントリが変更されます。実際のファイルの内容には触れる必要はありません。ファイルを別のパーティションまたはハード・ディスク・ドライブに移動すると、実際のファイルの内容もコピーする必要があります。これにはさらに時間がかかります。

私は一般に、ファイル名を2つではなく1つのディレクトリに限定しているため、ファイルを別のディレクトリ(同じパーティション上)に移動するよりも、名前が少し遅いと考えています。また、ファイルの属性を変更することでどのような意味があるのか​​よくわかりません。ファイルの「アーカイブ」フラグを設定するか、またはファイルを「読み取り専用」にします。ディレクトリエントリを新しいものに置き換えるのではなく、インプレースで変更することができる場合は、もう一度少しだけ異なるサイズの

もう一度:これはすべて特定のファイルシステムに依存するため、私の前提を慎重に考慮してください。 ( - .と名前を接頭辞 - たとえば、UNIXのファイルシステム上のファイルを非表示にすると、通常はそれをリネーム意味するが、同じことは、一般的なDOS/Windowsファイルシステムには当てはまりません。)

+0

ありがとうございます。これはNTFS形式のドライブを持つWindowsマシン上にあります。私が参照していたファイル "属性"は、アーカイブフラグを設定するようなものです。 – Yiftizur

0
Renaming took: 1498.8166 
ApplyAttribute took: 340.5407 
Transfer took: 2527.6837 
Transfer took: 3933.4944 
ApplyAttribute took: 419.635 
Renaming took: 1384.0079 

はテスト済み1000ファイル。 キャッシングが確実に行われないようにテストを2回実行します。

EDITED:不快なバグが修正されました。申し訳ありません。

属性を指定して実行します。

1

なぜこの情報を直接ファイルシステムに保存しますか?私はファイルを追跡するためにSQLデータベースを使用することをお勧めします。そうすれば、ファイルシステムの変更を避けることができます。おそらく高速化が必要になります。必要な場合には、ファイルの詳細を簡単に知ることができます。

また、大量のファイルを持つ1つのフォルダを持つことは、それ自体が遅いかもしれません。そのため、ファイルがあればもっと多くのフォルダを持つことを検討してください。

関連する問題