- - PR -
killのエラーについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-12-17 14:32
こんにちは。
VB6.0での運用です。(SP5) Windows98で運用していたアプリを ヂストリビューションでWindows2000のPCに セットし実行すると 下記のKillの部分で 「エラー75 パス名が無効です」のエラーになってしまいます。 "C:\AA.txt"のパスは間違いないのですが Windows98で動いていたアプリです Windows2000で何かセキュリティか何かが厳しくなったのでしょうか? 対応方法を教えて頂けないでしょうか? 宜しくお願いします。 コードの一部です。 Dim mstrERRFILE As String mstrERRFILE = "C:\AA.txt" If gfcmExistsFile(mstrERRFILE) = True Then Call Kill(mstrERRFILE) End If '************************************************************************** ' gfcmExistsFile(ファイルの存在チェック) '************************************************************************** Public Function gfcmExistsFile(ByVal pstrFileName As String) As Boolean 'Return : True→存在する ' : False→存在しない or エラー Dim oceFS As Object On Error GoTo ErrHandler Set oceFS = CreateObject("Scripting.FileSystemObject") gfcmExistsFile = oceFS.FileExists(pstrFileName) Set oceFS = Nothing Exit Function ErrHandler: gfcmExistsFile = False End Function | ||||||||
|
投稿日時: 2007-12-17 14:41
本当にそのファイル パスならば確かに妙なお話ですね。(提示されたファイル パスは例ではないですよね?) 読み取り専用属性ならば別のエラーになりますし、ファイル自体が破損しているなんてことも普通は考えられません。
ファイルの存在確認を FileSystemObject.FileExists メソッドを使用しているのに、ファイルの削除は FileSystemObject.DeleteFile メソッドを使っていないのですね。 私ならば、DeleteFile(filePath, True) で削除します。 # エラーどおりで本当にファイル パスが無効であるだけのような気がしてならないですが... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-12-17 14:49
gfcmExistsFile関数の中でFileSystemObjectを使用してるのに、killでファイルを
削除するのは何かチグハグな感がありますね。 FileSystemObjectのDeleteFileを使用したらよいのでは? 一応Win2000環境が無いので、XP環境のExcelマクロでkillを使用してみましたが、 問題なく動作しました。 Kill "C:\Writing.txt" | ||||||||
|
投稿日時: 2007-12-17 15:09
ご返答ありがとうございます。
早速試しにDeleteFileに修正してみました。 If gfcmExistsFile(mstrERRFILE) = True Then '' Call Kill(mstrERRFILE) Call gfDeleteFile(mstrERRFILE) End If '************************************************************************** ' gfDeleteFile(ファイル削除) '************************************************************************** Public Function gfDeleteFile(ByVal pstrFileName As String) As Boolean Dim oceFS As Object On Error GoTo ErrHandler Set oceFS = CreateObject("Scripting.FileSystemObject") gfDeleteFile = oceFS.DeleteFile(pstrFileName, True) Set oceFS = Nothing Exit Function ErrHandler: gfDeleteFile = False End Function 結果はOKでしたが どうしてなのでしょうか? | ||||||||
|
投稿日時: 2007-12-17 15:28
ネットワーク パスだったりするとありえそうですが、それ以外でこの手のエラーは見かけたことがないです。 FileSystemObject が OK だとすると... 逆に Dir 関数で存在確認はできそうですか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-12-17 16:09
じゃんぬねっとさん、何度もありがとうございます。
If Dir(pstrFileName) <> "" Then gfcmExistsFile = True Else gfcmExistsFile = False End If と、DirはWin2000でもOKでした。 Killだけがダメなのですね。 じゃんぬねっとさんのサイトに Killはお勧めしませんとありましたが 何か関係あるのでしょうか? | ||||||||
|
投稿日時: 2007-12-17 18:24
Windows2000にインストールするなら、Windows2000でディストリビューションを 作成するのが・・・・・
インストーラーにより半端にDLLが置き換わっているかもしれません。 VBは使用するDLL等はバージョン番号までパスが切られている為、場合によっては 動作しない事があります。 (プロジェクトに対し参照設定でDLL・OCXを設定した場合、設定した端末のDLL・OCXと 同じバージョンの物が無いとエラーになります。 これに対しCreateObjectを使用する場合は、バージョン番号まで切られていない 場合に限り、動作するマシンに入っている最新のバージョンで処理が行われる為、 エラーが出ないことがあります。 ※詳しくは『アーリーバインドとレイトバインドによる速度の違い』 http://www.int21.co.jp/pcdn/vb/vb5/bind/ を参照して下さい。) 試しにWindows2000上にWSHでスクリプトを組んで実行してみては如何でしょう。 スクリプト上でKillが動作するのであれば、インストーラを作り直す方が良いかも 知れません。 ※Killを使用しているのが一箇所とは限らない為、修正箇所を減らす意味でも御奨め です。 |
1