- PR -

killのエラーについて

1
投稿者投稿内容
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 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
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-12-17 14:41
引用:

なびさんの書き込み (2007-12-17 14:32) より:

下記のKillの部分で「エラー75 パス名が無効です」のエラーになってしまいます。
"C:AA.txt"のパスは間違いないのですが


本当にそのファイル パスならば確かに妙なお話ですね。(提示されたファイル パスは例ではないですよね?) 読み取り専用属性ならば別のエラーになりますし、ファイル自体が破損しているなんてことも普通は考えられません。

引用:

Windows98で動いていたアプリです
Windows2000で何かセキュリティか何かが厳しくなったのでしょうか?
対応方法を教えて頂けないでしょうか?

Call Kill(mstrERRFILE)


ファイルの存在確認を FileSystemObject.FileExists メソッドを使用しているのに、ファイルの削除は FileSystemObject.DeleteFile メソッドを使っていないのですね。 私ならば、DeleteFile(filePath, True) で削除します。

# エラーどおりで本当にファイル パスが無効であるだけのような気がしてならないですが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
上総
大ベテラン
会議室デビュー日: 2006/06/22
投稿数: 107
投稿日時: 2007-12-17 14:49
gfcmExistsFile関数の中でFileSystemObjectを使用してるのに、killでファイルを
削除するのは何かチグハグな感がありますね。
FileSystemObjectのDeleteFileを使用したらよいのでは?

一応Win2000環境が無いので、XP環境のExcelマクロでkillを使用してみましたが、
問題なく動作しました。
Kill "C:\Writing.txt"
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 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でしたが
どうしてなのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-12-17 15:28
引用:

なびさんの書き込み (2007-12-17 15:09) より:

結果はOKでしたがどうしてなのでしょうか?


ネットワーク パスだったりするとありえそうですが、それ以外でこの手のエラーは見かけたことがないです。 FileSystemObject が OK だとすると... 逆に Dir 関数で存在確認はできそうですか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2007-12-17 16:09
じゃんぬねっとさん、何度もありがとうございます。

If Dir(pstrFileName) <> "" Then
gfcmExistsFile = True
Else
gfcmExistsFile = False
End If
と、DirはWin2000でもOKでした。

Killだけがダメなのですね。


じゃんぬねっとさんのサイトに
Killはお勧めしませんとありましたが

何か関係あるのでしょうか?

上総
大ベテラン
会議室デビュー日: 2006/06/22
投稿数: 107
投稿日時: 2007-12-17 18:24
引用:

なびさんの書き込み(投稿日時: 2007-12-17 14:32)より
Windows98で運用していたアプリを
ヂストリビューションでWindows2000のPCに
セットし実行すると
下記のKillの部分で
「エラー75 パス名が無効です」のエラーになってしまいます。


Windows2000にインストールするなら、Windows2000でディストリビューションを
作成するのが・・・・・

引用:

なびさんの書き込み(投稿日時: 2007-12-17 16:09)より
じゃんぬねっとさんのサイトに
Killはお勧めしませんとありましたが

何か関係あるのでしょうか?


インストーラーにより半端にDLLが置き換わっているかもしれません。

VBは使用するDLL等はバージョン番号までパスが切られている為、場合によっては
動作しない事があります。
(プロジェクトに対し参照設定でDLL・OCXを設定した場合、設定した端末のDLL・OCXと
 同じバージョンの物が無いとエラーになります。

 これに対しCreateObjectを使用する場合は、バージョン番号まで切られていない
 場合に限り、動作するマシンに入っている最新のバージョンで処理が行われる為、
 エラーが出ないことがあります。

 ※詳しくは『アーリーバインドとレイトバインドによる速度の違い』
 http://www.int21.co.jp/pcdn/vb/vb5/bind/
 を参照して下さい。)

試しにWindows2000上にWSHでスクリプトを組んで実行してみては如何でしょう。
スクリプト上でKillが動作するのであれば、インストーラを作り直す方が良いかも
知れません。

※Killを使用しているのが一箇所とは限らない為、修正箇所を減らす意味でも御奨め
 です。
1

スキルアップ/キャリアアップ(JOB@IT)