DOBON.NET DOBON.NETプログラミング掲示板過去ログ

フォルダの移動について

環境/言語:[WindowsXP, C#2003]
分類:[.NET]

はじめまして
C#2003において、フォルダを移動させたいのですが、
ドライブが違う場合の方法を教えて下さい。
■No19169に返信(ビビさんの記事)

質問はもう少し的確に、回答者がわかるように書いたほうがいいと思います。

とりあえず文章を分解してみます。

・C#2003において

C#2003というのは、VisualStudio.NET 2003 の C# ということでよいでしょうか。
自分の環境はできるだけ詳しく書かないと伝わりません。環境に限った話ではない
ですが。

・フォルダを移動させたい

「どの」フォルダを移動させたいのか、キチンと書きましょう。
フルパスで全部そのまま書く必要はありませんが(機密保持契約的に公開してはい
けない場合もあるでしょうし)ただ「フォルダ」とだけ書かれても、伝わらないのではな
いでしょうか。

・ドライブが違う場合の方法

あえて「ドライブが違う場合」と明記しているということは、ドライブが同じ場合は自分
でなんとかできているということでしょうか。この仮定は憶測ですが、それが正しいの
かどうかは質問者であるビビさんにしかわかりません。

ドライブが同じ場合の方法がわかっているならそれを書くべきで、その上で「ドライブ
が同じ場合はこれこれこういう方法でできたのだけど、ドライブが違う場合は移動で
きません。ドライブが違う場合は方法が違うのでしょうか?」と書いておくべきかもし
れませんね。
また、エラーが発生したのであればそのエラーメッセージも書いておくと回答しやす
いです。

それらをふまえて、もう少し詳細な情報提供をお願いします。
失礼しました

> C#2003というのは、VisualStudio.NET 2003 の C# ということでよいでしょうか。

 はい その通りです


> ・フォルダを移動させたい

 指定したフォルダを指定した別のドライブのフォルダに移動させたいのです
 同一ドライブであれば、System.IO.Directory.Moveで移動させることは
 できましたが、ドライブが違うと移動出来ないようです。
 CドライブからCドライブであればSystem.IO.Directory.Moveで出来ますが、
 CドライブからDドライブに移動させる方法を教えて下さい。
2007/02/26(Mon) 14:58:15 編集(投稿者)

ここのサイトにやり方がありますよ。

違うドライブにフォルダを移動させる
http://dobon.net/vb/dotnet/file/directorycreate.html
(Microsoft.VisualBasic名前空間を使うことになりますけど)

# この記事は最近追加されたものですね。
■No19172に返信(Blueさんの記事)

うお、またもや Blue さんに先を越された(笑)

ドライブが違うと System.IO.Directory.Move で移動できないのは仕様ですね。
ちょっと技術的な話になると思いますが、この場合の Move はディレクトリエントリ
(ファイルがどこに書かれているかを指す場所)を書き換えて、実体のディレクトリを
動かすことなく、移動したように見せています。
これがドライブが違うとそういったことができないので、やるとしたら律儀にコピーして
から元ファイルを消すというような形になると思います。
しかもこの場合、ファイル単体ではなくディレクトリの移動ということなので、ディレクト
リ構造を自分で再現しつつコピー→削除を行わなくてはいけない気がしますので
ちょっと面倒そうですね。

Blue さんの方法だと、Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory
が .NET Framework version 2.0 で新しく追加されたものなので、2003 では使え
ないのがネックでしょうか。

ディレクトリ単位でコピーするのはこちらが参考になるかな?
【フォルダをコピーする】
http://dobon.net/vb/dotnet/file/copyfolder.html
確かにありました。
しかし、私の開発環境がVS2003、.Net Framework1.1なので出来ませんでした。
VS2003で、.Net Framework2.0にバージョンアップ出来るのでしょうか?
出来るのであれば、方法を教えて下さい


> 2007/02/26(Mon) 14:58:15 編集(投稿者)
>
> ここのサイトにやり方がありますよ。
>
> 違うドライブにフォルダを移動させる
> http://dobon.net/vb/dotnet/file/directorycreate.html
> (Microsoft.VisualBasic名前空間を使うことになりますけど)
>
> # この記事は最近追加されたものですね。
>VS2003、.Net Framework1.1なので
となると、容易にバージョンアップできるようなものではなさそう。


一応 WinAPIを使えば同様なことはできそうですけど。
SHFileOperationでFO_MOVEを指定したSHFILEOPSTRUCTを渡す。

もっとスマートの方法があるかも。
> 一応 WinAPIを使えば同様なことはできそうですけど。
> SHFileOperationでFO_MOVEを指定したSHFILEOPSTRUCTを渡す。

APIですか、、、
私にはわからないので、無理ですね。
諦めます
もしかしたら FileSystemObject の MoveFolder が使えるかも。

MoveFolder メソッド
>重要 このメソッドを使用してボリューム間でフォルダを移動できるのは、
>オペレーティング システムでボリューム間のフォルダ移動がサポートさ
>れている場合だけです。
■No19177に返信(Blueさんの記事)
> もしかしたら FileSystemObject の MoveFolder が使えるかも。

VB6では使ったことありますが、C#で使えるんですか?
難しそう。。
■No19178に返信(ビビさんの記事)
> VB6では使ったことありますが、C#で使えるんですか?
> 難しそう。。
参照設定すれば使えるはず。

一応参考
http://vbdotnet.fc2web.com/CS2005/Folder/Folder04.htm

COMなので、使い終わったら、ReleaseComObjectが必要だと思う。
ぽぴ王子さんがご指摘のように、.NET Framework 1.1では、フォルダをコピーしてから削除することにより、フォルダを移動できます。
■No19186に返信(管理人さんの記事)
> ぽぴ王子さんがご指摘のように、.NET Framework 1.1では、フォルダをコピーしてから削除することにより、フォルダを移動できます。

コピーして削除するようにしました
レスを頂いた皆さん有難う御座いました
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板