フォルダ、ファイルの移動について – プログラミング – Home

フォルダ、ファイルの移動について
 
通知
すべてクリア

フォルダ、ファイルの移動について


test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

お世話になります。

VC++/CLI

Windowsのゴミ箱のような機能を作成しておりあるフォルダ内のファイル、フォルダを別
のフォルダへ移動するプログラムを作成していますがファイル、フォルダの移動につい
て教えてください。

フォルダの移動は

System.IO.Directory.Move(C:\Test, C:\Test2);

としていますが上記の場合、移動先のC:\Test2というフォルダがすでに存在していると
例外が発生してしまいます。存在していなければ新規で作成されてC:\Testの中身が移動
されるのですが・・・。

今回、実現したいことは、既に存在するフォルダ(C:\Test2)にフォルダの中身ではなく
フォルダごと移動させたいのですが上記のコードでは実現不可でしょうか?

また、フォルダの移動だけではなくファイルもフォルダへ移動させたいのですがファイ
ルとフォルダを識別せず別フォルダへ移動できるようなクラス等はありますでしょう
か?


引用解決済
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

Win APIのSHFileOperationを直接呼ぶとか。
(.NET FrameworkにはSHFileOperationの機能はないらしい)

SHFILEOPSTRUCT構造体でLPCTSTR型が必要なのですが、Unicodeビルド(デフォルト)であ
ればPtrToStringCharsを使えばString^型変数からも取得できます。
(C++なので、C#やVBみたいにDllImportを使う必要はないです)


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

ただの移動ですよね?やりたいのはこういうことなのでは。

System::IO::Directory::Move(C:\\Test, C:\\Test2\\Test);

#SHFileOperationのような機能もあったりします。
http://www.atmarkit.co.jp/fdotnet/dotnettips/414progresscopy/progresscopy.html


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>#SHFileOperationのような機能もあったりします。

# 中さんの
# http://blogs.wankuma.com/naka/archive/2004/05/15/2654.aspx
# だけみてないかと思っていました。
# http://blogs.wankuma.com/naka/archive/2005/05/14/11369.aspx
# というエントリもあったわけね。
# わんくまメンバ失格やな。。。orz


返信引用
test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

Blueさん

>>Win APIのSHFileOperationを直接呼ぶとか

ありがとうございます。やはりAPIを呼ぶ以外に方法はなさそうですか・・・。
GetPrivateProfileStringのように引数を渡すだけで使用出来るのでしょうか?おはずか
しいことにAPIはGetPrivateProfileStringしか使用したことがないもので・・・。MSDN
等も見ましたが英語で分かりづらくサンプルソースもなくて他サイトも調べていますが
時間がかかっています。

subaruさん

>>ただの移動ですよね?やりたいのはこういうことなのでは。
>>System::IO::Directory::Move(C:\\Test, C:\\Test2\\Test);

ありがとうございます。はい、やりたいことはただのファイルとフォルダ移動だけで
す。Windowsのファイル、フォルダ移動と同じことがしたいのです。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

>>>ただの移動ですよね?やりたいのはこういうことなのでは。
>>>System::IO::Directory::Move(C:\\Test, C:\\Test2\\Test);
>
>ありがとうございます。はい、やりたいことはただのファイルとフォルダ移動だけで
>す。Windowsのファイル、フォルダ移動と同じことがしたいのです。

単に移動先の指定が間違っているだけでしょうと言いたかったのです。
移動するときにUIが必要、または移動ではなくてフォルダごとコピーしたい
という場合にはリンク先を見てねってことです。


返信引用
test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

subaruさん

>>#SHFileOperationのような機能もあったりします。
>> http://www.atmarkit.co.jp/fdotnet/dotnettips/414progresscopy/progresscopy.htm
>>l

こちらのサイトに記載されていた方法で検討しておりますがテストプログラムがおかし
な動きをしてしまいます。

以下テストプログラムです。

using namespace Microsoft::VisualBasic::FileIO;

String^ copyDest = C:\\test;
String^ moveDest = C:\\test2;

FileSystem::MoveDirectory(copyDest,moveDest);

としてボタン押下の処理で上記のコードを書いたのですが実行時にCドライブ直下のtest
フォルダはあたかも移動されたかのように消えるのですが肝心のtest2フォルダに移動さ
れてません。消えてしまったtestがどこに移動されてしまったのか行方が分からない状
況です。上記のコードに何かいかしなことはありますでしょうか


返信引用
test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

訂正

>>上記のコードに何かいかしなことはありますでしょうか
>>?

上記のコードに何かおかしな箇所はありますでしょうか?


返信引用
test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

>>System::IO::Directory::Move(C:\\Test, C:\\Test2\\Test);

う~ん、上記と一緒の原因のようでした・・・。

FileSystem::MoveDirectory(C:\test,C:\test2);

上記だとC:test2フォルダ直下にC:\testの中身が移動されるという認識みたい
です。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました