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

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

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

Re[5]: マイドキュメントを取得して、フォルダにコピーしたい


(過去ログ 135 を表示中)

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

■79181 / inTopicNo.1)  マイドキュメントを取得して、フォルダにコピーしたい
  
□投稿者/ はじめ (5回)-(2016/03/13(Sun) 15:50:43)

分類:[.NET 全般] 

マイドキュメントを取得して、フォルダにコピーしたい

Private Sub Button5_Click_1(sender As System.Object, e As System.EventArgs) Handles Button5.Click

If TextBox1.Text = "" Then
MessageBox.Show("保存先を選択して下さい")
Return
End If

'マイドキュメント取得
Dim strmyd As String
Dim strFolder As String

strmyd = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
strFolder = Dir(strmyd, FileAttribute.Directory)

My.Computer.FileSystem.CopyDirectory(strmyd, TextBox1.Text & "\" & strFolder)
MessageBox.Show("終わりました")

End Sub

上記を実行すると、パス c:\users\username\documents\my musicへのアクセスが拒否されました と表示されます

マイドキュメント内のファイルやフォルダを取得して、textbox1で表示されているファイルパスにコピーしたいのですが、
どのようにしたら良いでしょうか?

ご教授下さい






引用返信 編集キー/
■79185 / inTopicNo.2)  Re[1]: マイドキュメントを取得して、フォルダにコピーしたい
□投稿者/ Jitta (183回)-(2016/03/13(Sun) 20:41:50)
No79181 (はじめ さん) に返信
> 上記を実行すると、パス c:\users\username\documents\my musicへのアクセスが拒否されました と表示されます

 OSは?Vistaかな?
エクスプローラーで、マイドキュメントの「マイミュージック」って、アクセスできます?
そういうことです。


・ファイルかディレクトリかの区別をする。
・ファイルやディレクトリが、リパースポイントでないことを確認する。
・アクセス権を確認する。

こんなところか。

引用返信 編集キー/
■79188 / inTopicNo.3)  Re[2]: マイドキュメントを取得して、フォルダにコピーしたい
□投稿者/ はじめ (6回)-(2016/03/13(Sun) 21:00:23)
Jitta さん

回答ありがとうございます

アクセスする事はできます

Win7です

引用返信 編集キー/
■79189 / inTopicNo.4)  Re[1]: マイドキュメントを取得して、フォルダにコピーしたい
□投稿者/ Azulean (612回)-(2016/03/13(Sun) 21:39:45)
No79181 (はじめ さん) に返信
> 上記を実行すると、パス c:\users\username\documents\my musicへのアクセスが拒否されました と表示されます
> マイドキュメント内のファイルやフォルダを取得して、textbox1で表示されているファイルパスにコピーしたいのですが、
> どのようにしたら良いでしょうか?

試していませんが、UIOption.AllDialogs を指定すると回避できるという話を見かけました。
https://social.msdn.microsoft.com/Forums/vstudio/en-US/05e4a26c-c233-4f2a-898c-c53d563e71f3/mycomputerfilesystemcopydirectory-overwrite-error?forum=vbgeneral


これでダメなら、リバースポイントを含む、フォルダーのコピーはおそらく自力でコードを書かないといけません。
一行のお任せのメソッドではなく、フォルダーのファイルの列挙(ループ)やコピー処理など。

列挙の参考例とかはこの辺かなぁ。(コピー処理は別途自分で書き足してください)
http://stackoverflow.com/questions/4713156/cant-access-documents-folder-from-vb-net-in-windows-7
引用返信 編集キー/
■79192 / inTopicNo.5)  Re[2]: マイドキュメントを取得して、フォルダにコピーしたい
□投稿者/ はじめ (7回)-(2016/03/14(Mon) 11:26:47)
Azuleanさま

回答ありがとうございました


If TextBox1.Text = "" Then
MessageBox.Show("保存先を選択して下さい")
Return
End If

'マイドキュメント取得
Dim strmyd As String
Dim strFolder As String

strmyd = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 'マイドキュメント
strFolder = Dir(strmyd, FileAttribute.Directory)

My.Computer.FileSystem.CopyDirectory(strmyd, TextBox1.Text & "\" & strFolder, Microsoft.VisualBasic.FileIO.UIOption.AllDialogs)
MessageBox.Show("終わりました")



実行するとマイドキュメントのコピーを出来ました
本当に助かりました

もう一点質問がございます

上記を実行すると、ファイルやフォルダをコピーした時の画面が表示されます

表示させない方法はございますでしょうか?


引用返信 編集キー/
■79193 / inTopicNo.6)  Re[3]: マイドキュメントを取得して、フォルダにコピーしたい
□投稿者/ Azulean (613回)-(2016/03/14(Mon) 12:37:50)
少し厳しいことを書いているかもしれません。

先にも書きましたが、私は試していません。
そういったこだわりを実現したい場合は、自分自身で探究することが必要です。
オプションの組み合わせで何とかならないかとか、英語圏も含めて同じ問題にぶつかってる人はいないかとか。

個人的には、今のメソッドを使う限り、解決できないのでは?と予想していますが、試していないので断言できません。
引用返信 編集キー/
■79207 / inTopicNo.7)  Re[4]: マイドキュメントを取得して、フォルダにコピーしたい
□投稿者/ はじめ (8回)-(2016/03/15(Tue) 18:15:32)
2016/03/15(Tue) 18:15:49 編集(投稿者)

Azulean さん

回答ありがとうございました

解決済み
引用返信 編集キー/
■79552 / inTopicNo.8)  Re[5]: マイドキュメントを取得して、フォルダにコピーしたい
□投稿者/ Jitta (193回)-(2016/04/13(Wed) 21:38:27)
> アクセスする事はできます
え〜?私の所では、「アクセスが拒否されました」のダイアログが出て、一覧には「このフォルダーは使用できません」と出るんだけどなぁ。

(SHGetFolderPath 等を使わずに)マイドキュメントの下にあることを期待するアプリケーション向けのダミーだったはず。
ここの「新しいバージョンの Windows をインストールした後、フォルダを開けなくなった。」の2つ目。
http://windows.microsoft.com/ja-JP/windows-vista/Troubleshoot-access-denied-when-opening-files-or-folders
> ・このバージョンの Windows で名前を変更されたか移動されたフォルダにアクセスしようとしている。
> これらのフォルダは、開いたり、移動したり、削除したりできません。新しい場所へのポインタとしてのみ機能します。

Vista 以降は互換性のために置いてあるジャンクションポイントなので、そこが取れてなくても大丈夫。
また、ジャンクションポイントの取り扱いについては、よくよく考えなければならない。
たとえば、Symantec の製品だと、ジャンクションポイント以下には潜らない、というオプションがあったりする。
ジャンクションの張り方によっては、ループが発生するし、何度も同じものを調べることになるから。
参考: https://support.microsoft.com/ja-jp/kb/973455#/ja-jp/kb/973455
# この投稿では「ジャンクションポイント」と書いたけど、「接合ポイント」「再解析ポイント(リパースポイント)」「シンボリックリンク(ソフトリンク)」という語も使われる。

https://msdn.microsoft.com/ja-jp/library/ms127957.aspx
ちゃんと例外情報が書いてあるのだから、例外が発生することを想定したコードを書くべき。

> 試していませんが、UIOption.AllDialogs を指定すると回避できるという話を見かけました。
試してみた。
AllDialogs だけでなく、OnlyErrorDialogs でも回避可能。
こちらはエラーが発生したときのみ、ダイアログが表示される。
で、Process Monitor を使って、どの様なアクセスをしているのかを調べてみた。
UIOption なしの時:"Documents\*" を FindFirstFile して、得られたものを CreateFile で開く。ここで My Music にアクセスするので Access Denied になる。
UIOption ありの時:SHFileOperation 関数を使う。一覧には My Music が入っているが、コピーの対象から外される。よって、例外は発生しない。

ウチでは「コピー対象から外される」という結果になったんだけど、大丈夫なんかいな?

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -