VB6.0 フォルダの移動


コリン  2004-10-29 06:37:52  No: 86299

VB6.0にてフォルダを移動する命令はありますでしょうか?

.netだとrenameがあるようなのですが、VB6だとどうやら
renameは存在しないようです。

コピー後削除だと不安です。

よろしくお願いします。


みい  2004-10-29 07:51:45  No: 86300

Name 旧ファイル名 As 新ファイル名
でできなかったかしら。
うろ覚えでごめんなさい。


コリン  2004-10-29 23:44:25  No: 86301

ありがとうございます。
Name "C:\from\folder_a" As "D:\test\folder_b"
を試したのですが、ドライブをまたがっての移動はできないようです。

そこで、以下のことを試しました。
'フォルダの移動のテスト
Sub command3_click()
    
    Dim colFilesystem   As Object
    Dim strOldPath      As String
    Dim strNewPath      As String

    Set colFilesystem = CreateObject("Scripting.FileSystemObject")
    strOldPath = "C:\from\folder_a"
    strNewPath = "D:\test\folder_b"
    
    ' ファイルの移動
    colFilesystem.MoveFolder strOldPath, strNewPath

    ' オブジェクトを解放
    Set colFilesystem = Nothing

End Sub
この場合、やはり同じドライブ内でのドライブの移動であれば、
問題なく実行できるのですが、
上記のように違うドライブへ移動しようとすると、

実行時エラー'70':
書き込みできません。

というエラーが発生します。
ファイルの属性を調べても特に気になるところはありませんでした。

どなたかわかられるかたいらっしゃいませんでしょうか?


raki  URL  2004-10-30 00:16:31  No: 86302

書き込みできない要因としては、以下が挙げられます。
①書き込みできないパスに移動しようとした。
  ・存在しないドライブや、書き込み権限の無いフォルダが指定されている

②移動したいフォルダまたはサブフォルダ、ファイルなどが使用されていて、
  移動できない。
  ・エクスプローラなどでフォルダを開いている
  ・Excelなどでファイルを開いている(ファイルがロックされている)

以上のことを調べて下さい。
エラー番号70から察するに、②が原因だと思うのですが。


コリン  2004-10-30 02:04:00  No: 86303

ありがとうございます。
②に関して調べたのですが、
そのフォルダにはテキストファイルを1つだけおいており、
エディタで開いたりはしていません。フォルダも、エクスプローラ
で表示しないようにしておこなっても、同じエラーが出ました。
たとえば
    strOldPath = "C:\from\folder_a"
    strNewPath = "C:\Test\folder_c"
なら成功するのですが
    strOldPath = "C:\from\folder_a"
    strNewPath = "D:\test\folder_b"
なら失敗します。
Dドライブの設定が良くないなどあるのでしょうか


ひろ  2004-10-30 02:46:43  No: 86304

> たとえば
>     strOldPath = "C:\from\folder_a"
>     strNewPath = "C:\Test\folder_c"
> なら成功するのですが
>     strOldPath = "C:\from\folder_a"
>     strNewPath = "D:\test\folder_b"
> なら失敗します。

Dドライブ内での移動は成功しますか?
(こんな感じ。)
     strOldPath = "D:\from\folder_a"
     strNewPath = "D:\test\folder_b"


raki  URL  2004-10-30 02:48:37  No: 86305

設定で考えられるのは先のレスの
>①書き込みできないパスに移動しようとした。
>  ・存在しないドライブや、書き込み権限の無いフォルダが指定されている
かと思いますが、こちらは確認されましたか?

C:\from フォルダ内の folder_a フォルダを
D:\test フォルダ内へ folder_b と名前を変えて移動したいが、
エラーということですよね。
D:\ドライブには test フォルダはありますか?
C:\ドライブ同士で行った場合はエラーにならなかったとのことですが、
C:\ドライブには Test フォルダが既に存在しているのではありませんか?

確かファイル・フォルダの移動の際、その上位フォルダが存在しない場合は、
エラーになってしまうはずです。

ちなみに、.NET Framework の場合移動先のフォルダが存在しない場合、
自動的に作成してくれますが、VB6ではしてくれません。
確かFileSystemObjectもダメだったはずです。
そこも併せて確認して下さい。


からす  2004-10-30 03:08:55  No: 86306

ヘルプを読むと下記が記述されていますね。

このメソッドを使ってボリューム間でフォルダを移動できるのは、
オペレーティング システムでボリューム間のフォルダ移動が
サポートされている場合だけです。

私の環境(Win2000 VB6.0 SP6)でも同様のエラーとなり、
権限等関係なく、フォルダ間の移動は出来ません。

>コピー後削除だと不安です。
それしか方法がないのでは?
コピー失敗したら削除しなきゃいいだけだし...


コリン  2004-10-30 03:21:25  No: 86307

みなさんありがとうございます。

>ひろさん
>Dドライブ内での移動は成功しますか?
>(こんな感じ。)
>     strOldPath = "D:\from\folder_a"
>     strNewPath = "D:\test\folder_b"
はい。これはできました

>rakiさん
>D:\ドライブには test フォルダはありますか?
はい。あらかじめ移動先のフォルダは作成してから行っています。
ちなみに、同じドライブ内でも、移動先のフォルダが存在しない場合は
エラーとなってしまいます。

>からすさん
私もそのヘルプを見ました。
私の環境はwindowsXP sp1でVB6.0なのですが、
オペレーティング システムでボリューム間のフォルダ移動が
サポートされていないのでしょうか。

>>コピー後削除だと不安です。
>それしか方法がないのでは?
ですよね。。。もし、コピーエラーを検出できず
削除してしまった場合を考えると怖かったんです><


からす  2004-10-30 03:28:47  No: 86308

>コピーエラーを検出できず
エラートラップすれば済む事では?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加