vbでprogram filesにファイルをコピーするとエラーが発生します。filecopy関数とFileSystemオブジェクトでもエラーが発生します。Win2000では上手くいきます。Win98では失敗します。何か違いがあるのでしょうか?

A 回答 (6件)

Windowsでは、Programとfilesの間にスペースがあるのがふつうだと思いますよ。


いずれにせよそれが原因ですね
    • good
    • 0

>コピー元ファイルの問題でしょう。


その可能性も否定できませんね。
どういう環境で使われているのか、実際のところ、詳細がわかりませんから。
ただ、
>コピー先に問題がある場合は違うエラーになるはずです。
というのは違うと思いますよ。
私も最初はそう思ったのですが、VB6では、どちらもおなじエラーになってしまいます。

>コピー元ファイルが存在しないとか。
>コピー元ファイルをopenしてcloseしていないとか。
そうですね。Dir関数ででフォルダもしくはファイルにアクセスできるとすれば、その可能性が高いですね。

何にせよ、2430326さんがどのようなソフトにしているかが重要ですね。
ためしに、新規にプロジェクトを作ってもらって、前述のソースで実行してもらうのがわかりやすいのですがね。

この回答への補足

Program filesのProgramとfilesのスペースを削除したところエラーがでませんでした。

補足日時:2005/04/15 19:16
    • good
    • 0

>エラー内容は「実行時エラー57ファイルが見つかりません」です。



コピー元ファイルの問題でしょう。
コピー先に問題がある場合は違うエラーになるはずです。

コピー元ファイルが存在しないとか。
コピー元ファイルをopenしてcloseしていないとか。
    • good
    • 0

ためしにWin32APIを使ってみても、当方では同じ結果でした。


これでできないとなると、ファイル名が間違っているか、なにかぐらいしか思い当たらないのですが。

以下、ソースです。

Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

Private Sub Command1_Click()
Dim s As String
Dim d As String
Dim x As String
Dim ret As Long

s = "c:\Sample.c"
d = "c:\Program files\Sample.c"
'' x = Dir(s)
'' FileCopy s, d
ret = CopyFile(s, d, False) '' 既存ファイルのオーバーライト

End Sub
    • good
    • 0

このあたりの挙動は変わっているとはおもわないのですが、試しに、Dir関数でProgram Filesフォルダが取得できるかどうか、確認してください。


Dim d As String
Dim rcv as String
d = "c:\Program files"
rcv = Dir(d)
って感じかな?
    • good
    • 0

どのようにされたのかわかりませんが、当方ではちゃんと動作しているようですよ。



とりあえず、フォーム上にCommand1ボタンを1つはりつけて、以下のソースを記述しました。
c:\にSample.cというファイルをおいておきます。
これで実行すると、Program FilesのなかにSample.cが
コピーされます。

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Private Sub Command1_Click()
Dim s As String
Dim d As String

s = "c:\Sample.c"
d = "c:\Program files\Sample.c"
FileCopy s, d
End Sub
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

環境的にはVisual Basic 6.0でテストしてあります。
動作確認はWindows2000とWindows98SEです。

この回答への補足

ご指摘どおりプログラムを作成し実行してみたのですが、
結果は同じでした。
環境的はVisual Basic 6.0です。
動作確認はWindows2000とWindows98SEです。
何台か98でテストしたのですが結果は同じでした。
エラー内容は「実行時エラー57ファイルが見つかりません」です。

補足日時:2005/04/15 10:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBプログラムから「管理者として実行」したい

コマンドプロンプトで実行したいコマンドが
「route add ***.***.***.*** mask 255.255.255.255 ***.***.***.***」 (*は、任意のIP)
だとします。

XPでは問題ないですが、Vista以降だと、管理者権限が必要なコマンドのため、
そもそもコマンドプロンプト自体を「管理者として実行」モードで起動する必要があります。

上記を、手作業で行う場合は、それで解決しますが、
同じ事を、VBのコードから実行したい場合、
System.Diagnostics.Process.Start
を使い、(以下サンプルコード)
---------------------------
Dim psi As New System.Diagnostics.ProcessStartInfo()

psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")
psi.UseShellExecute = False
psi.CreateNoWindow = True
psi.Arguments = "/c route add ***.***.***.*** mask 255.255.255.255 ***.***.***.***"

Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(psi)
p.WaitForExit()

-----------------------------------------------------------

とすると、XPでは、管理者権限を問われないので実行できますが、
Vista以降だと、コマンドが管理者権限で実行されていないためか実行が完了せず、コマンドの内容も行われていません。(route addコマンドの記述にミスは無いとします。)

Vista以降の場合、手作業で、コマンドプロンプトを右クリックして「管理者として実行」を選んで起動し、コマンドを実行するのと同じ事を、
VBのコードから行うには、どうしたらいいのでしょうか?
分かる方、教えてください。お願いします。

コマンドプロンプトで実行したいコマンドが
「route add ***.***.***.*** mask 255.255.255.255 ***.***.***.***」 (*は、任意のIP)
だとします。

XPでは問題ないですが、Vista以降だと、管理者権限が必要なコマンドのため、
そもそもコマンドプロンプト自体を「管理者として実行」モードで起動する必要があります。

上記を、手作業で行う場合は、それで解決しますが、
同じ事を、VBのコードから実行したい場合、
System.Diagnostics.Process.Start
を使い、(以下サンプルコード)
---------------------------...続きを読む

Aベストアンサー

http://www.atmarkit.co.jp/fdotnet/dotnettips/954uacrunas/uacrunas.html

Q「管理者としてこのプログラムを実行する」がチェックできない

最近PCを買い替え、Windows Vistaに慣れず四苦八苦しているものです。

プログラム(.exeファイル)を右クリックしプロパティを開くと、
互換性タブに「管理者としてこのプログラムを実行する」という
項目がありますが、グレー表示となっており、チェックを入れられません。
チェックを入れられるようにするためには、何の操作をすればよいか、
ご存じの方教えてください。

スタートアップに登録しているプログラムの中で管理者権限を必要と
するものがあり、ユーザアカウント制御(UAC)の機能により毎回
管理者のパスワードを求められるため、上記設定により常に管理者
権限で実行するようにすることで解消したいと考えています。

よろしくお願いいたします。

Aベストアンサー

NO1追加
ユーザーアカウント制御を有効にしましたか?
「スタート」「コントロールパネル」「ユーザーアカウントと家族のための安全設定」「ユーザーアカウント」「ユーザーアカウント制御の有効化または無効化」クリック「ユーザーアカウント制御」「続行」「ユーザーアカウント制御(UAC)を使ってコンピュータの保護に役立たせる」チェックを入れ「OK」再起動。


人気Q&Aランキング

おすすめ情報