
客先に納入したVBのプログラムなのですが、先日「75:パス名が無効です」のエラーが発生しました。
エラーが発生した部分はファイルをオープンし、読み込む処理を行っているところです。
このファイルは他のプログラムからもアクセスすることがあるためオープン時にロックして処理を行っています。
「55:ファイルは既に開かれています」や「70:書き込み出来ません」のエラーが発生することは分かっていたのでエラートラップを仕込んであります。
以下にその処理を抜粋しました。
intFileNo = FreeFile()
Open strFileName For Random Lock Read Write As #intFileNo Len = Len(udtHeader)
…(ここにエラートラップ処理が記述してあります)
Get #intFileNo, 1, udtHeader
close
※strFileNameには読込対象となるファイル名が格納されます。iniファイルから読み込んだ値と固定文字列から生成しているので空白になっていたりすることは考えられません。
※udtHeaderはレコードで読み書きするためのユーザ定義型変数です。
上に記述した他のプログラムも同様の処理でファイルアクセスを行っています。
ファイルオープン前にファイルの有無チェックは行っています。
この中の処理で「パス名が無効です」が発生する要因が分からず困っています。
自分だけではなく他のプログラムもアクセスすることが要因としてあるだろうとは思うのですが、どのような状況になれば発生するかが分かりません。
もし、なにか分かる方がいらっしゃいましたらご教授お願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
「パス名が無効」というキーワードにて
私の記憶が反応し、その材料をもとに考えられるものとして…
・現場では、アクセスするファイルを格納しているディレクトリの
パス中にスペースが入っている。
この場合、推測される動きは
スペースの部分でパス名が区切られてしまうため
Open処理は成功したっぽい動きをしてしまう。
しかしGet処理では目的のファイルは存在していないうえ
アクセスしようとしているパス自体が存在していないために
「パス名が無効です」というエラーになると考えられます。
これ「C:\Documents and Settings\~~」とかに格納していると発生してしまうという
とある分野では盲点をつかれた微妙に有名な現象。
対策はダブルクォーテーションでくくった格好で指定するらしいです。
似たようなものに、単純にパス名が長過ぎというのがあります。
・連続稼動しているため、別の部分の影響が溜まりに溜まって
結果、その部分が被害を受けた。
この場合、乱暴な言い方をするなら
「そのソースが関わっている全てのリストが調査対象」
となってしまいます。
どこかの変数の領域確保の大きさが間違っていたり、
想定以上のデータを処理が発生した影響により
結果、パス名を格納している部分のメモリが破壊された。
VBで発生しうるものかどうか判りませんが
しうるかどうか判らないからこそ
稼働環境を考えると可能性が高いともいえます。
客先で確認可能でしたら、Open 前後、Get 前後に MsgBox でもで
パス名を表示させてみてもよいでしょう。
件数や時間など、なんらかの特定のタイミングで発生しているなら
どこかでファイルを開きっ放され過ぎ~~の結果、オープンできなかった。
(つまり #inrFileNo が不定となった。)
けれどエラートラップに捕まってオープンできたフリになった。
なのに Get しようとしたので悲鳴をあげた。
どちらにしても、質問文にある数行のステップでも
稼働時間、データ件数、空き容量などの複数の要素が想定されます。
さて、エラーを引き起こしている正体は
どのような証拠隠滅をしているのでしょう。
あっ、「一つのディレクトリに作成可能なファイル数の上限を超えた」
というのを忘れていました。
以上、ソフト障害プロファイリング遅報でした。
この回答への補足
回答ありがとうございます。
Openするファイルのパスにスペースは入っていませんし、文字数も30字程度なので問題ありません。
既に存在しているファイルに対して処理を行っているので、作成可能ファイル数の上限は大丈夫です。
連続稼働していて、他のプログラムからも同じファイルをアクセスしているためにメモリを破壊してしまうような可能性があるのでしょうか?
何日かはメンテナンスで停止することもありますが、3年間ほど稼働し続けている状態で今までに一回も発生しておらず、発生直前の1秒前にも同じ処理を行っていますが、まったく問題ありませんでした。
メモリが破壊されてしまう可能性を検証することを考えてみます。
No.3
- 回答日時:
エラーが発生したときにstrFileNameの値は意図したファイルが入っているんですよね?
1つ1つ間違いないのか潰していくしかないですね。
間違いないと思ってたらウッカリってよくあるし。
>「55:ファイルは既に開かれています」や「70:書き込み出来ません」のエラーが発生することは分かっていたのでエラートラップを仕込んであります。
最悪↑の処理にエラー発生時の処理も入れるしかないのかな。
この回答への補足
Open処理の前にファイルの存在チェックを行っていますし、もしファイルが存在しなくても新規に作成するのでstrFileNameに意図したファイル名が入っていなくてもエラーは発生しません。
今回の質問は上記のソースコードで「パス名が無効です」のエラーが発生する要因を教えて頂きたいのです。
エラートラップで回避するようには既になっているので、なぜこのエラーが発生してしまったかを突き止めたいのです。
No.2
- 回答日時:
他のプログラムってのの挙動を調べる必要はないでしょうか?
たとえば他のプログラムで該当ファイルを削除したりとか移動しているとか。
あとはstrFileNameってのがグローバル宣言されていてどっかのプログラムから値を書き換えられているとか・・・
この回答への補足
回答ありがとうございます。
他のプログラムの動作はこのプログラムと同じ記述でファイル内容を読み込むだけです。ファイルを削除したり、移動したりはしていません。
strFileNameはプロシージャ内で宣言されており、プログラム内の他の部分で書き換えられることはありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) Excelを開くとエラーが出る 2 2022/10/03 16:13
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Windows 10 Windows Updateが動作しません 7 2022/08/12 16:26
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
このQ&Aを見た人はこんなQ&Aも見ています
-
ExcelでVBAを使用した際に、『パス名が無効です』とエラーになります。
Excel(エクセル)
-
MkDir パス名が無効です
Visual Basic(VBA)
-
マクロを実行するとパス名が無効です
その他(Microsoft Office)
-
-
4
VB実行時エラー75:「パス名が無効です」について
Visual Basic(VBA)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
「パス名が無効です」と表示されて実行出来ません
その他(ソフトウェア)
-
7
VB6でLabelの最前面にText Boxを書く
Visual Basic(VBA)
-
8
VB6のプロジェクトロードエラーについて
Visual Basic(VBA)
-
9
RmDirでフォルダが削除できない vba
PowerPoint(パワーポイント)
-
10
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
11
VBAでファイルパスが長すぎてコピー時のエラー対策
Excel(エクセル)
-
12
FileCopy時のエラー
Visual Basic(VBA)
-
13
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
14
ネットワークドライブのファイルをFileCopyできない
Visual Basic(VBA)
-
15
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
16
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
17
frxファイルの役目
Visual Basic(VBA)
-
18
エクセルからアクセスにインポートすると、エラーが出てしまいます。原因を教えていただけませんか。
Access(アクセス)
-
19
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
20
エクセルを共有するとPCによって表示が異なるのはなぜでしょう。。
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【関数】同じ関数なのに、エラ...
-
「パス名が無効です」の発生原因
-
batファイルでレジストリキーの...
-
PowerShellを使って関連付けら...
-
この EXCEL VBA の意味を教えて...
-
access テキストボックスの値取得
-
gccを行ってもexeファイルが生...
-
VBでファイルが開かれているか...
-
VBから参照できないCのDLLを使...
-
エクセルマクロでエラーの原因...
-
FORTRANの実行エラーについて
-
ADOを使用してExcelファイルを...
-
ExcelVBAで既に開いてるwordを...
-
fgets関数のEOFの扱い方について
-
アクセスのクエリでコンパイル...
-
メディアプレイヤーが動かない?
-
VBScriptでエクセル VBProject
-
排他ロックが掛かっているファ...
-
EXCELのVBAでの保存方法
-
兵庫県教員採用試験の願書記入...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【関数】同じ関数なのに、エラ...
-
access テキストボックスの値取得
-
「パス名が無効です」の発生原因
-
ExcelVBAで既に開いてるwordを...
-
NAS上のファイルの使用中が解除...
-
Returnに対するGoSubがありません
-
gccを行ってもexeファイルが生...
-
PowerShellを使って関連付けら...
-
batファイルでレジストリキーの...
-
アクセスのクエリでコンパイル...
-
VB6 Dir関数で52エラー発生
-
エクセルマクロでエラーの原因...
-
VBでファイルが開かれているか...
-
【COBOL】read文でエラー
-
FTPの送信結果を検知したい
-
VBから参照できないCのDLLを使...
-
fgets関数のEOFの扱い方について
-
ACCESS VBAでのインポート
-
データベースソフトのアクセス2...
-
DisplayAlertsブロパティで ”実...
おすすめ情報