• 締切済み

ファイルパスと互換性

VB.NETを用いてあるEXEファイルを作っています。 EXEファイルのディレクトリは http://dobon.net/vb/dotnet/vb6/apppath.html のやり方により帰ってくることがわかります 今私が使っているのはDirectX 9でほぼWindows専用なのであまり関係ないのですが、将来、DirectX 9部をOpenGL.NETだとかで書き換えたりして他のCLI環境でも使えるようにするかもしれません。 その中でコード中に相対パスを埋め込もうと思っています。 Module MainModule Dim str As String ="\images\himajin\image.png" Shared Function GetAppPath() As String Return System.IO.Path.GetDirectoryName( _ System.Reflection.Assembly.GetExecutingAssembly().Location) End Function Sub Main 'GetAppPath() & strの文字列を引数に取り、ファイルを読み込む。ちょっとソースが思いつかないので省略 End Sub End Module ・・・ただ・・・、ディレクトリの区切りが「\」ではないと思うんで、これで認識はしないかもしれず。 Dim str As String = System.IO.Path.DirectorySeparatorChar & "images" System.IO.Path.DirectorySeparatorChar & "himajin" & System.IO.Path.DirectorySeparatorChar & "image.png" という面倒くさい書式をとることになるのかなあと思っています。(まぁこれは俺自身がImportを使いたがらないということもあるんですが) このパス記述が複数あったら全部書き換えることになるんだろうかと思うと・・・恐ろしくて。 何かいい方法はないでしょうか?

みんなの回答

回答No.1

何を疑問視しているのかがわかりませんが、、 ディレクトリ区切り文字の「\」をタイプしたくないってこと? パスの連結は、 System.IO.Path.Combine(パス、パスやファイル) で、連結パスが取れますが。。。 はずしていたらすいません。

himajin100000
質問者

補足

>ディレクトリ区切り文字の「\」をタイプしたくないってこと? タイプする分にはかまわないのですが、「それが移植先でもきちんと動作するのか?」が、自分にとっての疑問点でした。 パスの連結は、 System.IO.Path.Combine(パス、パスやファイル) で、連結パスが取れますが。。。 http://msdn2.microsoft.com/ja-jp/library/system.io.path.combine(VS.80).aspx ですね 相対パスを記述しようと思ったときに安易にString型の第二引数に System.IO.Path.Combine(GetAppPath、"hoge\hoge\hoge.png") と与えた場合、「"\"」をディレクトリ区切り文字としないシステムだったら、「hoge\hoge\hoge.png」というディレクトリあるいはファイルとみなされる可能性があると思いました。さすがにa~zとA~Zを区切り文字とするシステムは自分は切り捨てて考えますが。 ものすごく極端な話ディレクトリ区切り文字が"|"で |root|hoge\hoge|foo|bar としているシステム(仮にαと呼ぶ)があるかもしれません。 これをあらかじめ "hoge" & System.IO.Path.DirectorySeparatorChar & "hoge" & System.IO.Path.DirectorySeparatorChar & "hoge.png" と書いておけば、 αでも問題なく動作しますよね?(逆にそう書かないと動かないと思う) System.IO.Path.Combine(GetAppPath、"hoge" & System.IO.Path.DirectorySeparatorChar & "hoge" & System.IO.Path.DirectorySeparatorChar & "hoge.png") αでもそれぞれがきちんとディレクトリとして認識されます でもディレクトリを指定するたびにソース中のあらゆるパスに対してこんな記述は非常に面倒くさいわけです。 ・・・うーん。通じたかなぁ・・・・・ #えと、ごめんなさい、今質問が5つ溜まってまして、本件とは全く別なことを聞きたくなったので申し訳ありませんが、締め切ります。

関連するQ&A