2

私のプログラムでは、次のようなフォルダのコンテンツに多くの変更を加えるメソッドを呼び出しています。

deleting files/folders,
changing files/folders,
adding files/folders,
adding/deleting symboliclinks/junctions.

これまでのところ問題ありません。しかし、オプションでフォルダーの最終状態(すべての操作が完了した後)を別のフォルダーに投影して、元のフォルダーが変更されないようにするというアイデアを思いつきました。

操作を適用する前にフォルダをコピーするだけでは適切ではありません。操作によって大量のデータが削除される可能性があるため、事前に不必要にコピーする必要があります。それで、プロのプログラマーは確かにこのようにアプローチしないだろうと思いました。

理想的には、次のようなものを記述します(擬似コード)。

originalFolder.Delete(たくさんのファイル).Add(他のいくつかのもの、おそらくいくつかの権限を変更するなど)。ProjectTo(newFolder)

このようなデザインパターンや他の方法で実現できるものはありますか?たぶん、別のフォルダに具体化する前に何かを行うことができる仮想ファイルシステムはありますか?

私は拡張メソッドの書き方を知っていて、すでにたくさんの些細なものを書いていますが、私は本当にこのようなことを達成する方法について正しい道を歩む必要があります。

4

2 に答える 2

1

追加と削除がAPIを介して行われる場合は、物理ファイルに触れることなくメモリ内のファイルのリストを変更できます。設定が完了したら、最終フォルダーのコピーを使用して変更を行います。

もちろん、これはファイルを変更する必要がないことを前提としているため、コミットする前にファイルシステムから新しい構造を読み取る必要はありません。つまり、完全にアプリケーション内にあるということです。

これがLinuxの場合、ハードリンクを使用してファイルを多くのフォルダーにハードリンクし、2番目のフォルダーに触れることなく最初のフォルダーで実際にやりたいことを実行するという別の解決策を提案しました。NTFSがそれをサポートしているかどうかはわかりません。

于 2012-07-06T13:02:14.433 に答える
0

コミットすることが確実になるまで元のフォルダーへの変更を遅らせるだけの場合は、作業単位パターンでうまくいく可能性があります。フォルダに適用されるすべての操作をコンテナに保存し、それらを順番にコミットします。

ただし、変更がコミットされる前に元のフォルダに変更を加えると、問題が発生する可能性があるため、これは少し危険に聞こえます。その場合、すべての操作が成功することを可能な限り確実にするために、ある種の並行性チェックを実装する必要があります。

于 2012-07-06T12:54:59.493 に答える