• 締切済み

「パス名が無効です」の発生原因

客先に納入した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はレコードで読み書きするためのユーザ定義型変数です。 上に記述した他のプログラムも同様の処理でファイルアクセスを行っています。 ファイルオープン前にファイルの有無チェックは行っています。 この中の処理で「パス名が無効です」が発生する要因が分からず困っています。 自分だけではなく他のプログラムもアクセスすることが要因としてあるだろうとは思うのですが、どのような状況になれば発生するかが分かりません。 もし、なにか分かる方がいらっしゃいましたらご教授お願いします。

みんなの回答

  • hisappy
  • ベストアンサー率46% (184/392)
回答No.4

「パス名が無効」というキーワードにて 私の記憶が反応し、その材料をもとに考えられるものとして… ・現場では、アクセスするファイルを格納しているディレクトリの  パス中にスペースが入っている。 この場合、推測される動きは スペースの部分でパス名が区切られてしまうため Open処理は成功したっぽい動きをしてしまう。 しかしGet処理では目的のファイルは存在していないうえ アクセスしようとしているパス自体が存在していないために 「パス名が無効です」というエラーになると考えられます。 これ「C:\Documents and Settings\~~」とかに格納していると発生してしまうという とある分野では盲点をつかれた微妙に有名な現象。 対策はダブルクォーテーションでくくった格好で指定するらしいです。 似たようなものに、単純にパス名が長過ぎというのがあります。 ・連続稼動しているため、別の部分の影響が溜まりに溜まって  結果、その部分が被害を受けた。 この場合、乱暴な言い方をするなら 「そのソースが関わっている全てのリストが調査対象」 となってしまいます。 どこかの変数の領域確保の大きさが間違っていたり、 想定以上のデータを処理が発生した影響により 結果、パス名を格納している部分のメモリが破壊された。 VBで発生しうるものかどうか判りませんが しうるかどうか判らないからこそ 稼働環境を考えると可能性が高いともいえます。 客先で確認可能でしたら、Open 前後、Get 前後に MsgBox でもで パス名を表示させてみてもよいでしょう。 件数や時間など、なんらかの特定のタイミングで発生しているなら どこかでファイルを開きっ放され過ぎ~~の結果、オープンできなかった。 (つまり #inrFileNo が不定となった。) けれどエラートラップに捕まってオープンできたフリになった。 なのに Get しようとしたので悲鳴をあげた。 どちらにしても、質問文にある数行のステップでも 稼働時間、データ件数、空き容量などの複数の要素が想定されます。 さて、エラーを引き起こしている正体は どのような証拠隠滅をしているのでしょう。 あっ、「一つのディレクトリに作成可能なファイル数の上限を超えた」 というのを忘れていました。 以上、ソフト障害プロファイリング遅報でした。

bcedge
質問者

補足

回答ありがとうございます。 Openするファイルのパスにスペースは入っていませんし、文字数も30字程度なので問題ありません。 既に存在しているファイルに対して処理を行っているので、作成可能ファイル数の上限は大丈夫です。 連続稼働していて、他のプログラムからも同じファイルをアクセスしているためにメモリを破壊してしまうような可能性があるのでしょうか? 何日かはメンテナンスで停止することもありますが、3年間ほど稼働し続けている状態で今までに一回も発生しておらず、発生直前の1秒前にも同じ処理を行っていますが、まったく問題ありませんでした。 メモリが破壊されてしまう可能性を検証することを考えてみます。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

エラーが発生したときにstrFileNameの値は意図したファイルが入っているんですよね? 1つ1つ間違いないのか潰していくしかないですね。 間違いないと思ってたらウッカリってよくあるし。 >「55:ファイルは既に開かれています」や「70:書き込み出来ません」のエラーが発生することは分かっていたのでエラートラップを仕込んであります。 最悪↑の処理にエラー発生時の処理も入れるしかないのかな。

bcedge
質問者

補足

Open処理の前にファイルの存在チェックを行っていますし、もしファイルが存在しなくても新規に作成するのでstrFileNameに意図したファイル名が入っていなくてもエラーは発生しません。 今回の質問は上記のソースコードで「パス名が無効です」のエラーが発生する要因を教えて頂きたいのです。 エラートラップで回避するようには既になっているので、なぜこのエラーが発生してしまったかを突き止めたいのです。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

他のプログラムってのの挙動を調べる必要はないでしょうか? たとえば他のプログラムで該当ファイルを削除したりとか移動しているとか。 あとはstrFileNameってのがグローバル宣言されていてどっかのプログラムから値を書き換えられているとか・・・

bcedge
質問者

補足

回答ありがとうございます。 他のプログラムの動作はこのプログラムと同じ記述でファイル内容を読み込むだけです。ファイルを削除したり、移動したりはしていません。 strFileNameはプロシージャ内で宣言されており、プログラム内の他の部分で書き換えられることはありません。

全文を見る
すると、全ての回答が全文表示されます。
  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.1

こんにちは 素直に考えるとiniファイルの定義が間違っている可能性が一番高い(誤字のたぐい、存在しないディレクトリなど)と思われますが当然確認済みですよね(^^;

bcedge
質問者

補足

回答ありがとうございます。 説明が不足していましたが、このプログラムは連続稼働(24H)していて、「パス名が無効です」が発生するまでは問題なく動作していました。 iniファイルは起動時に読み込み、その値をずっと保持し続けるのでiniファイルの定義は問題ありません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VB実行時エラー75:「パス名が無効です」について

    VBについて分からない事があり、投稿しました。 VBでDB(オラクル)のテーブルのデータをFD内のテキストファイルに 書き込むプログラムを作成しています。ちなみにFDは複数枚使用します。 (例:番号1のデータは1枚目のFD、番号2のデータは2枚目のFD・・・) このプログラムをボタンのクリック時イベントで書くのですが、 まずFDがマシンに挿入されているかを調べる為、 Open 「FD内のテキストファイルのパス」 For Input As #FileNo という風に行っており、FDが挿入されていない場合のみ、処理を中断し、 その他のエラーでは処理を中断しないようにしています。 そして、FDが挿入されていると、1枚目のFDにデータを書き込む処理をして、書き込んだ後にFDを取り出し、 次に2枚目のFDを挿入し、FDにデータを書く・・・ というような処理を行っているのですが、 2 枚目以降でFDを入れ替えて処理を継続すると、実行時エラー75「パス名が無効です」が発生します。 原因として考えられるのは、 マシン側がFDを差し替えたという状態を認識できないためにエラーが発生するものだと思っています。 (違うかもしれません) 対処としては、このエラーが発生した場合は、処理を中断せずに継続するという方法もあるのですが、 このエラーを発生させないようにしたいのですが、対処の仕方が全く分かりません。 もし何かわかる方がいらっしゃいましたら、ご教授御願い致します。

  • 【C#】パス名で無効な文字

    いつも教えて!gooにお世話になってます。 C#に関して質問です。 VisualC#2008を使用しています。 csvファイルを読み込むプログラムを作成しているところですが、つまづいています。 ボタンを押すとcsvファイルが読み込めるようにしたいのですが、 「パス名に無効な文字が含まれています」と表示され、強制終了してしまいます。 以下のようにパス名を指定しているのですが、何か無効な文字が含まれているのでしょうか? お手数ですが誰かご回答よろしくお願いします。 StreamReader sr = new StreamReader("C:\\Documents and Settings\admin\\My Documents\\Visual Studio 2008\algorithm\algorithm\algorithm\readfile\\shortfile.csv",Encoding.Default);

  • DVDAuthorGUIでオーサリングすると「パス名が無効です」とエラーが出る

    題名の通り、フリーソフトのDVDAuthorGUIでオーサリングしようとすると、「パス名が無効です」というエラーが出て、強制終了します。 それでいろいろ調べてみたのですが、「ファイル名やフォルダ名に日本語を使わなければよい」というアドバイスがあったので、やってみたのですが変わりませんでした。Windows Vistaを使っています。

  • 無効なパスというエラーメッセージが出てフォームが開かない

    Access2000で検索システムを作りました。条件を入力したらマッチするデータが表示される(フォームを開く形にしています。)という流れです。それまで正常に機能していたのですが,ネットワーク上のパソコンの名前を変えたところ、「'\\変更前のパソコン名\****\**.mdb'は無効なパスです。パス名を正確に指定しているか、またはファイルが属するサーバーに接続しているかを確認して ください。」というエラーが出てフォームが開きません。  エラーが出て止まってしまう箇所の記述は DoCmd. Openform "フォーム名"となっています。フォーム名の前にパスを指定することができるのでしょうか?ヘルプではさがせなかったのですが。どなたか回避方法を教えてください。

  • MkDir パス名が無効です

    ファイル名は取得できているはずなのですが。 エラー75「パス名が無効です」とエラーになり止まってしまうのですが、 ファイルはできているんです。 何がいけないんでしょうか? '------------------------------------ Private Sub コマンド35_Click() Set db = CurrentDb Set rs = db.OpenRecordset("Q_03_管理票_YES") Dim var1 As String var1 = rs.[管理番号] Dim var2 As String var2 = rs.[関連作業依頼] Dim NewFolderName1 As String Dim FileName1 As String NewFolderName1 = CurrentProject.Path & "\作業依頼対応\" & var1 & "\" & "回答分" & "\" & var2 FileName1 = Dir$(NewFolderName1, vbDirectory) 'ファイル名を得る '---ファイルを作成 If (FileName1 = "") Then 'ない場合は、作成する。 Dim myFileSystem As New Scripting.FileSystemObject myFileSystem.CreateFolder NewFolderName1 MkDir NewFolderName1 MsgBox "ファイル作成" Else '---ファイルが存在する場合 MsgBox "ファイルはあります" End If End Sub

  • 8.3形式のファイル名が無効になっています

    ナショナルのホームページから、好みのデスクトップ用の画像をダウンロードしようとしました。 すると、「情報1693コマンドラインの引数が無効です」と言うエラー表示されます。 そこで、色々と調べていましたら、”8.3形式のファイル名が無効になっている場合に発生することが確認されています”等と表示されます。 この、”8.3形式のファイル名が無効になっています”とはどういうことでしょうか? ご指導願います。

  • VBのKillについて

    皆様いつもお世話になっております。 質問なのですが VBの構文の一部で Dim strFilename as string strFilename = "C:\Temp\*.*" Kill strFilename とすると、指定したフォルダの中身が削除されるのですが、このフォルダ内に以下のpdfファイルを入れると、エラーが発生してしまいます。 テキストファイルで約同容量のファイルの削除も試み成功しました。 また、10KB程度のpdfファイルも削除できます。 何が原因かお分かりの方おりませんでしょうか? 【詳細】 ファイル名:J00932_4.pdf ファイルサイズ:8,531KB エラーメッセージ:パス名が無効です。 どうぞよろしくお願いします。

  • タイトルにフルパス名を表示したい。

    Access2003、Excel2003についてですが、タイトルにファイル名だけ じゃなくてパス名も表示させることは可能でしょうか? いくつも同じファイル名のものがある場合、どれが開いているのか わからなくなるときがあります。

  • パスが作られるまで待っているプログラムは???

    C#であるプロセスにより特定のパスが作られるのを確認するものを作成したいのですが・・・ おそらくループを使わなくてはいけないかと思うのですが、非常にループ処理が苦手でして・・・ どなたかご教示いただけませんでしょうか? 例えばとあるプログラムが「C:\hogehoge\hugahuga」というパスを処理中のどこかで作るとします。 このパスが出来るまで待ってそのなかに出来るファイルを読み込んで1行だけ書き換えたいのですが・・・ グルグルループさせるとしたらエラー対策もしなくてはいけないかと思うのですが、どのように作ればいいのでしょうか?

  • 新規作成ファイルパスが有効か無効か判定したい

    こんにちは。 VC++を使用してWindows上で動作するプログラムを作成しているのですが、ユーザに絶対パスをテキストで入力させ、そのパスが存在しなければ、フォルダとファイルを新規作成するかどうか問い合わせるという処理を行いたいと考えています。  そこで質問なのですが、 ・有効なパス設定で存在しないフォルダ ・無効なパス 上記を判定したいのですが、現状区別が付けられないでいます。実際には、以下のように処理しています。 OutputFilename:CString型、絶対パス(ファイル名含む)が入っている。 OutputPath:CString型、絶対パス(上記から「\ファイル名」を除いたもの) // 出力ファイルのパス存在チェック pathlen = OutputFilename.ReverseFind('\x5c'); // 最後の\記号までの文字数を取得 if(pathlen == -1) return -1; // エラー OutputPath = OutputFilename.GetBufferSetLength(pathlen); nRcd = _chdir(OutputPath); if(nRcd){ if(errno == ENOENT) return -1; ※ } ※無効なパス(例えばabc\bcd\efgなど)であっても、存在しないパス(例えばC:\tempは存在し、その配下には存在しないフォルダ名を指定-C:\temp\abc\def)であっても、同様に_chdir関数が失敗し、errnoにENOENTが入るようです。 どなたかご存知の方がおられましたら、どうかご教授お願いいたします。

このQ&Aのポイント
  • PX-M730Fを使用中。プリンターの電源を入れ直し再起動して繋がるときがあるが、また駄目になる。
  • プリンターのみ無線ランに繋がらない。PCやスマホ等は無線ランに繋がっている。
  • EPSON製品についての質問です。
回答を見る

専門家に質問してみよう