- ベストアンサー
VB2005 でパス名が誤っていないかチェックする方法について
VB2005 の初心者です。 iniファイルで指定したフォルダ(パス)を読み込んで処理をしたいのですが、指定したパスが誤っている場合は、どのようにチェックすれば良いのでしょうか。 下記サンプルのとおり、System.IO.Path.GetInvalidPathChars() でチェックする方法があるようですが、ヘルプには「ファイル名やディレクトリ名としては無効なすべての文字が含まれるかどうかは、保証されません。」とあるようです。 実際、"Cd:\<>Work\Test.txt" というパスにすると、チェックはスルーしてしまいました。 Dim filepath As String = "C:\<>Work\Test.txt" Dim invalidPathChars As Char() = System.IO.Path.GetInvalidPathChars() For Each invalidChar As Char In invalidPathChars If filepath.IndexOf(invalidChar) > -1 Then Console.WriteLine("使用できない文字 " & invalidChar.ToString() & " が含まれています。") End If Next 誤ったパスを完全にチェックする方法はあるのでしょうか。 何かヒントになることでも良いので、皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#2です >無い場合、IO.Directory.CreateDirectory で作成しようとすると、"Cd:\Projects" というフォルダは作成できないのでエラーとなってしまうのです。 「CreateDirectory」の戻り値が「DirectoryNotFoundException」で有ればパスが間違えていると判断できると思いますが。。。 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpref/html/frlrfSystemIODirectoryClassCreateDirectoryTopic.asp 余り深く考えず、「CreateDirectory」がエラーで失敗すると言う事はパスに何らかの問題があると考えられますから、そこで判断するだけでも十分かと思います。
その他の回答 (4)
- HIROs-NET
- ベストアンサー率78% (15/19)
ファイルの有無を確認し、なければ作成するとのことですが、ファイルの有無の確認はどのメソッドを使用していますか? File.Existメソッドを使用しえいる場合は、存在しないパスが指定されてもエラーで落ちることはないはずですが? よろしかったら、その辺の詳細を教えていただけますか?
補足
回答ありがとうございます! おそらく、質問内容のソースは HIROs-NET 様のページを参考にさせていただいたものです。 質問の説明が誤っており、大変申し訳ありません。 System.IO.Directory.Exists でフォルダの有無を確認して、無い場合、IO.Directory.CreateDirectory で作成しようとすると、"Cd:\Projects" というフォルダは作成できないのでエラーとなってしまうのです。 フォルダの有無の確認と、パス自体があり得るパスかどうかの確認は別物ですよね?? 完全なパスのチェックはできるのでしょうか??
- NYOI
- ベストアンサー率58% (56/96)
ファイルの存在確認 System.IO.File.Exists(filePath) ディレクトリの存在確認 System.IO.Directory.Exists(dirPath) 上記でfalseが返って来た場合はパス自体が間違っているとみなして、パスから再設定させてはいかがですか? パスの再設定にはFolderBrouwserDialogなどを利用して、確実に存在するパスを指定させれば大丈夫かと。
お礼
回答、ありがとうございます! FolderBrouwserDialog というのがあるのですね。 早速調べてみます。 貴重な情報ありがとうございました。
- kouji_124
- ベストアンサー率46% (283/605)
質問者様のお考えだと、たとえパスに問題が無くても指定されたiniファイルの存在までは判らないですよね。 もっと単純に「ファイルが存在する=パスに不正な文字が無い」と考えて見ては如何でしょう。 ファイルの有無を確認するのであれば、Fileクラスの「Exists メソッド」を使えば出来ます。 Dim filepath As String = "C:\<>Work\Test.txt" If File.Exists(filepath) Then Console.WriteLine("ファイルが見つかりました。") else Console.WriteLine("ファイルが見つかりません。") End If こんな感じで如何でしょう。。。
お礼
回答ありがとうございます! ANo.1 の補足にも記載させていただいたとおり、初回はフォルダが無いため作成し、2回目以降は指定したフォルダで処理(ログをはく)をししたいのです。しかし、 "Cd:\Projects" というフォルダを作成しようとするとエラーとなります。 やはり、フォルダが存在しないなら、エラーとするしかないのでしょうか。
- unamana19
- ベストアンサー率62% (56/89)
ファイルの有無を確認するのではダメなのでしょうか? If Not My.Computer.FileSystem.FileExists("ファイルパス") Then ''ファイルが存在しない End If など
補足
早速の回答、ありがとうございます。 質問内容の説明不足で申し訳ありません。 ファイルの有無を確認して、無ければ作成するのですが、その際、パスが誤っているとエラーで落ちてしまうため、最初にパスをチェックしたいのです。 不可能であれば、ファイルの有無の確認をして、無ければエラーとするしかないのかな・・・と思っていますが。 やはり、完全にパスをチェックする方法はないのでしょうか?
お礼
再度の回答、本当にありがとうございます! CreateDirectory の戻り値が返ってくるとは、調査不足でした。 ただ、実験してみると、戻り値は NotSupportedException でしたが、これでエラーが拾えることが確認できました。 初歩的な質問でしたが、本当にありがとうございました!