
ディレクトリ構造の変更前と変更後の比較を行って、
どのフォルダがどこへ行ったかを判別するプログラムを作成したいのですが、どんなアルゴリズムにすればよいでしょうか?
変更前と変更後でディレクトリは1:1に対応しません。n:mや削除、追加など色んなパターンがあります。
ツリー構造(ディレクトリ構造)とは、以下のようなイメージのものです。
C:.
├─Acrobat
│ ├─ActiveX
│ ├─Browser
│ ├─FileInfo
│ ├─HowTo
│ │ ├─ENU
│ │ │ └─Images
│ │ └─JPN
│ │ └─Images
│ ├─Javascripts
No.1ベストアンサー
- 回答日時:
考えてみましたが何とも言えません。
取り敢えず回答カウントがゼロなので投稿させていただきます。
但し、これはあくまで個人的なアイデアやイメージである事を前提とします。
☆ツリー構造はGUIコントロールでありマウスで操作するとコールバックされる事を前提(TreeGUIとします)
☆手順はコールバックがかかる度に変化したTreeGUIの状態からデータ構造を生成します
☆データ型
struct TreeData
{
string strDirectory;//ディレクトリの名前 "Actobat"など
int nAction;//このディレクトリに対して行われた操作フラグの記録
//その他TreeDataを連結するポインタなど
};
☆page[?]//TreeData*をしまう為の配列
page[0]//変更前
page[1]//変更後
(1)以下のスタートの状態からTreeDataを生成してpage[0]に入れる
├─Acrobat
│ ├─ActiveX
│ ├─Browser
│ ├─FileInfo
│ ├─HowTo
│ │ ├─ENU
│ │ │ └─Images
│ │ └─JPN
│ │ └─Images
│ ├─Javascripts
(2)TreeGUIをマウスで突っついたりディレクトリ操作をする(コールバック発生)TreeGUIの状態かTreeDataを生成してpage[1]に入れる
アルゴリズム等
1:1やm:nの確認なら再帰等で操作してCTreeDataの連結数を数えて比較すれば出来ます
oldCount = DoCount(page[0])
nowCount = DoCount(page[1])
ディレクトリの位置が違うがカウントは同じ
if(oldCount == nowCount)//...
あとはTreeDataの構造を操作しながらその都度処理していくしかなさそうです。当然ながらどのような操作を受けたディレクトリなのかを示すメンバデータも必要になります。
また変更前と変更後の二つだけしか必要ない場合、TreeGUIに反応するたびpage[1]にTreeData生成しますが、一歩手前を検出する場合は変更以前のものが軌跡を残すように連鎖するので(アンドゥリドゥみたいになる)pageは動的に拡大されます(page[0] ~ page[n])。
この設問に回答するのは実に困難であります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
現在位置より2つ上のディレク...
-
FTPコマンドでディレクトリごと...
-
MkDir関数
-
Permission denied in
-
VB2008でFTPでのディ...
-
Subversionのリポジトリの削除
-
phpのheader("Location:#pos")...
-
.htaccessにphp_valueが使用できな
-
*.php、*.php3、*.phtmlの違い
-
mysql→EUC-JP、php→UTF-8の時の...
-
phpでメール送信できません 原...
-
phpのextension_dirを複数指定...
-
phpの中でphpを書けないか
-
PHP PDOライブラリが読み込まれ...
-
mamp環境でのcronの使い方で困...
-
PHPでメールを受信するには?
-
再度、xamppにおけるjpgraphの...
-
セッションについての設定なの...
-
2つの画像ファイルが異なるファ...
-
require_once()でファイルが読...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
CFileDialogの最初のディレクト...
-
Subversionのリポジトリの削除
-
バッチを用いたフォルダの自動移動
-
makefile でファイルをコピーす...
-
rmdirでフォルダが消せません
-
visualstudioでc#のdllができない
-
Visual C++ 2005 Express Editi...
-
ロケットBBSについて
-
phpのftp_putについて
-
現在位置より2つ上のディレク...
-
define でのルートディレクト...
-
ハッスルサーバーで海外からWP...
-
VB.NET 最下位のディレクトリ名...
-
絶対パス?絶対アドレス?意味...
-
レンタルサーバーでPDF出力
-
MkDir関数
-
図に示す階層構造で,現在のデ...
-
【BAT(バッチ)ファイル】Web...
-
http://localhost/に.htaccess...
おすすめ情報