C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[11]: フォルダ削除


(過去ログ 39 を表示中)

[トピック内 15 記事 (1 - 15 表示)]  << 0 >>

■20608 / inTopicNo.1)  フォルダ削除
  
□投稿者/ sikuminalex (1回)-(2008/06/12(Thu) 21:30:38)

分類:[VBScript] 

php,javascript,vbscriptでファイル管理システムを構築してます。

今できること。
指定したフォルダのみ
削除ができる。

やりたいこと。
メイン〜8階層(末端)で構成されたフォルダがある。
そこで、残したいフォルダ以外を全部削除するやり方の
ヒントを頂けたらと思います。
これらは、VBSriptでやります。
引用返信 編集キー/
■20609 / inTopicNo.2)  Re[1]: フォルダ削除
□投稿者/ れい (650回)-(2008/06/12(Thu) 21:39:18)
No20608 (sikuminalex さん) に返信
> php,javascript,vbscriptでファイル管理システムを構築してます。
>
> 今できること。
> 指定したフォルダのみ
> 削除ができる。
>
> やりたいこと。
> メイン〜8階層(末端)で構成されたフォルダがある。
> そこで、残したいフォルダ以外を全部削除するやり方の
> ヒントを頂けたらと思います。

階層があるのですよね。
では、残したいフォルダが最上位で無い場合はどうするのでしょう?
残したいフォルダの上のフォルダは残すのか、
それとも上のフォルダは削除して、残したいフォルダはどこか別のところに移動するのか。

仕様を明確に書かないとわかりません。
引用返信 編集キー/
■20616 / inTopicNo.3)  Re[2]: フォルダ削除
□投稿者/ sikuminalex (2回)-(2008/06/12(Thu) 22:37:52)
2008/06/12(Thu) 23:04:48 編集(投稿者)
2008/06/12(Thu) 23:04:44 編集(投稿者)

No20609 (れい さん) に返信
> 階層があるのですよね。
> では、残したいフォルダが最上位で無い場合はどうするのでしょう?
> 残したいフォルダの上のフォルダは残すのか、
> それとも上のフォルダは削除して、残したいフォルダはどこか別のところに移動するのか。
>
> 仕様を明確に書かないとわかりません。

ごめんなさい。都度になりますが、残したいフォルダの上のフォルダはそのまま残します。
一つ例をあげるとこんな感じです。

AAA
|-bbb
|-ccc
|-ddd
|-eee
|-fff
|-ggg
|-nokoshitai
全部フォルダだとして、この場合、nokoshitaiフォルダを残したいので
それより上位のbbb,ddd,eeeフォルダをなんとか削除しようと思っています。


引用返信 編集キー/
■20617 / inTopicNo.4)  Re[3]: フォルダ削除
□投稿者/ sikuminalex (3回)-(2008/06/12(Thu) 23:04:10)
No20616 (sikuminalex さん) に返信
> ■No20609 (れい さん) に返信
>>階層があるのですよね。
>>では、残したいフォルダが最上位で無い場合はどうするのでしょう?
>>残したいフォルダの上のフォルダは残すのか、
>>それとも上のフォルダは削除して、残したいフォルダはどこか別のところに移動するのか。
>>
>>仕様を明確に書かないとわかりません。
> 
> ごめんなさい。都度になりますが、残したいフォルダの上のフォルダはそのまま残します。
> 一つ例をあげるとこんな感じです。
> 
> AAA
>   |-bbb
>   |-ccc
>      |-ddd
>      |-eee
>      |-fff
>         |-ggg
>            |-nokoshitai
> 全部フォルダだとして、この場合、nokoshitaiフォルダを残したいので
> それより上位のbbb,ddd,eeeフォルダをなんとか削除しようと思っています。
> 
> 

引用返信 編集キー/
■20619 / inTopicNo.5)  Re[3]: フォルダ削除
□投稿者/ れい (652回)-(2008/06/12(Thu) 23:15:18)
No20616 (sikuminalex さん) に返信
> ■No20609 (れい さん) に返信
>>階層があるのですよね。
>>では、残したいフォルダが最上位で無い場合はどうするのでしょう?
>>残したいフォルダの上のフォルダは残すのか、
>>それとも上のフォルダは削除して、残したいフォルダはどこか別のところに移動するのか。
>>
>>仕様を明確に書かないとわかりません。
> 
> ごめんなさい。都度になりますが、残したいフォルダの上のフォルダはそのまま残します。
> 一つ例をあげるとこんな感じです。
> 
> AAA
>   |-bbb
>   |-ccc
>      |-ddd
>      |-eee
>      |-fff
>         |-ggg
>            |-nokoshitai
> 全部フォルダだとして、この場合、nokoshitaiフォルダを残したいので
> それより上位のbbb,ddd,eeeフォルダをなんとか削除しようと思っています。

ならまぁいろいろ手がありますね。
例えば。

1 全部のフォルダをリストに列挙する
2 残したいフォルダをリストから削除する。
3 リストを長い順にソートする
4 長い順にフォルダを削除する。その際、「子フォルダ」があるフォルダは削除しない。

とか。

パス文字列とファイルやフォルダは1対1対応ではない、つまり
「AAA\bbb\ddd\eee\nokoshitai」でも「AAA\bbb\ddd\eee\nokoshitai」でも、
もしかすると「AAA\bbb\ddd\eee\nokosh~1」でも同じフォルダをさす場合があります。

nokoshitaiフォルダのパス文字列がユーザー入力由来などで綺麗な形でない可能性がある場合は
それらを綺麗にしないといけないのでちょっとめんどくさいですね。

また、リパースポイントやハード/ソフトリンク、ジャンクションなどを考慮せねばいけないときも
めんどくさいです。

「削除共用なし」で開いて、削除出来ないようにした上で、
再帰的に全部削除する手もあります。

引用返信 編集キー/
■20621 / inTopicNo.6)  Re[4]: フォルダ削除
□投稿者/ sikuminalex (4回)-(2008/06/13(Fri) 03:17:41)
No20617 (sikuminalex さん) に返信
お返事ありがとうございます。
リストとの比較ですか。
残したいフォルダのリストは少ないから用意できたのですが、
削除対照の方は多すぎるので残したいリストを活用したいです。

理想としては
残したいフォルダと同階層にあるいらないフォルダは全削除!
ってできないのかしら。

>>「削除共用なし」で開いて、削除出来ないようにした上
↑これはどんな処理ですか。
引用返信 編集キー/
■20622 / inTopicNo.7)  Re[5]: フォルダ削除
□投稿者/ れい (653回)-(2008/06/13(Fri) 04:43:31)
No20621 (sikuminalex さん) に返信
> ■No20617 (sikuminalex さん) に返信
> お返事ありがとうございます。
> リストとの比較ですか。
> 残したいフォルダのリストは少ないから用意できたのですが、
> 削除対照の方は多すぎるので残したいリストを活用したいです。

PCを扱っているのに
それほど「量」が問題になるとは思えません。
何百というフォルダがあっても、
一度リストにしてしまえばその後は殆ど問題になりません。

> 理想としては
> 残したいフォルダと同階層にあるいらないフォルダは全削除!
> ってできないのかしら。

普通にそう処理すればできます。
同階層にある要らないフォルダを指定して削除すればOKですよ。

> >>「削除共用なし」で開いて、削除出来ないようにした上
> ↑これはどんな処理ですか。

CreateFile関数のdwShareModeにFILE_SHARE_DELETEを指定しないで開くということです。
意味が分からない場合は違う方法を考えたほうがいいでしょう。

引用返信 編集キー/
■20626 / inTopicNo.8)  Re[5]: フォルダ削除
□投稿者/ こあら (9回)-(2008/06/13(Fri) 09:51:52)
2008/06/13(Fri) 09:52:19 編集(投稿者)
No20621 (sikuminalex さん) に返信
> 残したいフォルダと同階層にあるいらないフォルダは全削除!
> ってできないのかしら。

> AAA
>   |-bbb
>   |-ccc
>      |-ddd
>      |-eee
>      |-fff
>         |-ggg
>            |-nokoshitai

1.nokoshitai を TEMP へ(ルートからのパスをすべて作成して)移動して
> TEMP
>   |-ccc
>      |-fff
>         |-ggg
>            |-nokoshitai

2.AAAを全削除して
3.TEMPをAAAへMoveFolder

ということでしょうか?

引用返信 編集キー/
■20628 / inTopicNo.9)  Re[6]: フォルダ削除
□投稿者/ sikuminalex (5回)-(2008/06/13(Fri) 10:26:59)
No20626 (こあら さん) に返信
> 1.nokoshitai を TEMP へ(ルートからのパスをすべて作成して)移動して
>>TEMP
>>  |-ccc
>>     |-fff
>>        |-ggg
>>           |-nokoshitai
> 
> 2.AAAを全削除して
> 3.TEMPをAAAへMoveFolder
> 
> ということでしょうか?
> 
こあらさん
ありがとうございます。
どのフォルダも移動させずに、行いたいです。
パスは変えたくないので。

  AAA
   |-ccc
      |-fff
         |-ggg
            |-nokoshitai

よろしくおねがいします。

引用返信 編集キー/
■20633 / inTopicNo.10)  Re[7]: フォルダ削除
□投稿者/ ぽぴ王子 (390回)-(2008/06/13(Fri) 11:29:08)
ぽぴ王子 さんの Web サイト
No20628 (sikuminalex さん) に返信

> こあらさん
> ありがとうございます。
> どのフォルダも移動させずに、行いたいです。
> パスは変えたくないので。

うーん、よく読むといいんじゃないかな?と思ったヨ。

>>1.nokoshitai を TEMP へ(ルートからのパスをすべて作成して)移動して

とあるので、nokoshitai フォルダを含む ccc\fff\ggg\nokoshitai を全部 TEMP へ
移動ってことじゃないかな。
元がこうだったとして(少し追加してみた)

> \
> |-AAA
> |  |-bbb
> |  |-ccc
> |  |  |-ddd
> |  |  |-eee
> |  |  |-fff
> |  |     |-ggg
> |  |        |-nokoshitai
> |  |-hhh
> |     |-ないしょでアイアイ
> |-TEMP

それをこんな風に移動。というかコピーでいいかな。

> \
> |-AAA
> |  |-bbb
> |  |-ccc
> |  |  |-ddd
> |  |  |-eee
> |  |  |-fff
> |  |     |-ggg
> |  |        |-nokoshitai
> |  |-hhh
> |     |-ないしょでアイアイ
> |-TEMP
>    |-ccc
>       |-fff
>          |-ggg
>             |-nokoshitai

AAA 以下のフォルダを何も考えずに全部削除。

> \
> |-AAA
> |-TEMP
>    |-ccc
>       |-fff
>          |-ggg
>             |-nokoshitai

そしてから TEMP に移動しておいた ccc 以下の nokoshitai フォルダまでを元に
もどしてやると。

> \
> |-AAA
> |  |-ccc
> |     |-fff
> |        |-ggg
> |           |-nokoshitai
> |-TEMP

こんな感じでどうでしょう?って話じゃないかと。
これならパスも変わらないし、あれこれ考えなくていいので楽かもねと。100%…SOかもね!と。

引用返信 編集キー/
■20637 / inTopicNo.11)  Re[8]: フォルダ削除
□投稿者/ れい (654回)-(2008/06/13(Fri) 11:56:45)
No20633 (ぽぴ王子 さん) に返信
> それをこんな風に移動。というかコピーでいいかな。

いや移動の方がいいのでは?

> こんな感じでどうでしょう?って話じゃないかと。

ほとんどの場合においてはいいと思いますが、
いちおう細かい点を指摘しておくと。

フォルダの「移動」や「コピー」は「削除しない」とは違います。
なので、アクセス権が足りなかったり、
フォルダの作成を検知するソフトが動いちゃったり、
いろいろ不具合が生じる場合があります。
引用返信 編集キー/
■20640 / inTopicNo.12)  Re[9]: フォルダ削除
□投稿者/ ぽぴ王子 (391回)-(2008/06/13(Fri) 13:26:25)
ぽぴ王子 さんの Web サイト
No20637 (れい さん) に返信
> ■No20633 (ぽぴ王子 さん) に返信
>>それをこんな風に移動。というかコピーでいいかな。
>
> いや移動の方がいいのでは?

移動でいいですかね。
同じドライブであれば移動の方が処理が簡単(内部的に)かな?と
思うので、やっぱり移動でいいでしょうか。

>>こんな感じでどうでしょう?って話じゃないかと。
>
> ほとんどの場合においてはいいと思いますが、
> いちおう細かい点を指摘しておくと。
>
> フォルダの「移動」や「コピー」は「削除しない」とは違います。
> なので、アクセス権が足りなかったり、
> フォルダの作成を検知するソフトが動いちゃったり、
> いろいろ不具合が生じる場合があります。

あー、そこは考えていませんでした。
必ずしもマズいとは言い切れないけど(でもアクセス権の問題は意外と
ありそうです)不具合が生じる可能性はあり得ますね。

処理が VBScript なので、複雑そうな処理は難しいのかもと思ってますが
そう簡単ではなさそうですね。
引用返信 編集キー/
■20675 / inTopicNo.13)  Re[10]: フォルダ削除
□投稿者/ れい (656回)-(2008/06/13(Fri) 16:29:20)
No20640 (ぽぴ王子 さん) に返信
> ■No20637 (れい さん) に返信
>>■No20633 (ぽぴ王子 さん) に返信
> >>それをこんな風に移動。というかコピーでいいかな。
>>
>>いや移動の方がいいのでは?
>
> 移動でいいですかね。
> 同じドライブであれば移動の方が処理が簡単(内部的に)かな?と
> 思うので、やっぱり移動でいいでしょうか。

移動でないとファイルの日付も変わっちゃいますし。

でも、移動だと、ファイルが開かれてるときは困りますね。
コピーならファイルが開かれていても可能な場合が多い。
そういった例外処理はめんどくさそうですね。

でも例外処理を考えるなら、そんな細かい所どうでもいいですね。
途中で例外がおきたら、フォルダ構造はぐちゃぐちゃです。
一時フォルダに残すべきフォルダがあるなんて、ユーザーにはなかなか分かりません。
自動で元に戻す、というのも大変ですね。
元に戻すときにも例外が発生するかもしれません。

なので。

コピーして元に戻すのも、移動して戻すのも、
方針としては「ダメ」かと思います。

> 処理が VBScript なので、複雑そうな処理は難しいのかもと思ってますが
> そう簡単ではなさそうですね。

私なら…
ディレクトリツリーを深さ優先探索して、
削除しないフォルダにあたった場合はスキップ、
それ以外は普通に削除して、「中身が空でないので削除できない」という例外は無視、
と処理すると思います。
引用返信 編集キー/
■20676 / inTopicNo.14)  Re[10]: フォルダ削除
□投稿者/ ちゃっぴ (120回)-(2008/06/13(Fri) 16:30:05)
ちゃっぴ さんの Web サイト
Timing の問題と I/O が段違いというのもありますね。
Copy と move の違い。

同一 partition 内の移動であれば directory entry の変更だけですみますので。
引用返信 編集キー/
■20720 / inTopicNo.15)  Re[11]: フォルダ削除
□投稿者/ sikuminalex (6回)-(2008/06/13(Fri) 21:58:21)
No20675 (れい さん) に返信
> ■No20640 (ぽぴ王子 さん) に返信
>>■No20637 (れい さん) に返信
> >>■No20633 (ぽぴ王子 さん) に返信
リストを比較して一個ずつtryしてきます!
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -