アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

誤ったパスを完全にチェックする方法はあるのでしょうか。
何かヒントになることでも良いので、皆様の知恵をお借りできれば幸いです。
よろしくお願い致します。

A 回答 (5件)

#2です



>無い場合、IO.Directory.CreateDirectory で作成しようとすると、"Cd:\Projects" というフォルダは作成できないのでエラーとなってしまうのです。

「CreateDirectory」の戻り値が「DirectoryNotFoundException」で有ればパスが間違えていると判断できると思いますが。。。

http://msdn.microsoft.com/library/ja/default.asp …

余り深く考えず、「CreateDirectory」がエラーで失敗すると言う事はパスに何らかの問題があると考えられますから、そこで判断するだけでも十分かと思います。
    • good
    • 0
この回答へのお礼

再度の回答、本当にありがとうございます!

CreateDirectory の戻り値が返ってくるとは、調査不足でした。
ただ、実験してみると、戻り値は NotSupportedException でしたが、これでエラーが拾えることが確認できました。

初歩的な質問でしたが、本当にありがとうございました!

お礼日時:2008/02/08 18:25

ファイルの有無を確認し、なければ作成するとのことですが、ファイルの有無の確認はどのメソッドを使用していますか?



File.Existメソッドを使用しえいる場合は、存在しないパスが指定されてもエラーで落ちることはないはずですが?

よろしかったら、その辺の詳細を教えていただけますか?

この回答への補足

回答ありがとうございます!

おそらく、質問内容のソースは HIROs-NET 様のページを参考にさせていただいたものです。

質問の説明が誤っており、大変申し訳ありません。
System.IO.Directory.Exists でフォルダの有無を確認して、無い場合、IO.Directory.CreateDirectory で作成しようとすると、"Cd:\Projects" というフォルダは作成できないのでエラーとなってしまうのです。

フォルダの有無の確認と、パス自体があり得るパスかどうかの確認は別物ですよね??
完全なパスのチェックはできるのでしょうか??

補足日時:2008/02/08 16:01
    • good
    • 0

ファイルの存在確認


System.IO.File.Exists(filePath)

ディレクトリの存在確認
System.IO.Directory.Exists(dirPath)

上記でfalseが返って来た場合はパス自体が間違っているとみなして、パスから再設定させてはいかがですか?
パスの再設定にはFolderBrouwserDialogなどを利用して、確実に存在するパスを指定させれば大丈夫かと。
    • good
    • 0
この回答へのお礼

回答、ありがとうございます!

FolderBrouwserDialog というのがあるのですね。
早速調べてみます。

貴重な情報ありがとうございました。

お礼日時:2008/02/08 19:48

質問者様のお考えだと、たとえパスに問題が無くても指定されたiniファイルの存在までは判らないですよね。



もっと単純に「ファイルが存在する=パスに不正な文字が無い」と考えて見ては如何でしょう。

ファイルの有無を確認するのであれば、Fileクラスの「Exists メソッド」を使えば出来ます。

Dim filepath As String = "C:\<>Work\Test.txt"

If File.Exists(filepath) Then
  Console.WriteLine("ファイルが見つかりました。")
else
  Console.WriteLine("ファイルが見つかりません。")
End If

こんな感じで如何でしょう。。。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

ANo.1 の補足にも記載させていただいたとおり、初回はフォルダが無いため作成し、2回目以降は指定したフォルダで処理(ログをはく)をししたいのです。しかし、 "Cd:\Projects" というフォルダを作成しようとするとエラーとなります。

やはり、フォルダが存在しないなら、エラーとするしかないのでしょうか。

お礼日時:2008/02/08 16:56

ファイルの有無を確認するのではダメなのでしょうか?


If Not My.Computer.FileSystem.FileExists("ファイルパス") Then
''ファイルが存在しない
End If
など

この回答への補足

早速の回答、ありがとうございます。

質問内容の説明不足で申し訳ありません。
ファイルの有無を確認して、無ければ作成するのですが、その際、パスが誤っているとエラーで落ちてしまうため、最初にパスをチェックしたいのです。

不可能であれば、ファイルの有無の確認をして、無ければエラーとするしかないのかな・・・と思っていますが。

やはり、完全にパスをチェックする方法はないのでしょうか?

補足日時:2008/02/08 15:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!