Pandora Pocket

IT系と日常系の備忘録。三日坊主。

タイトルが結論。

Linux環境で動く.NET Coreアプリを書いていた時、ファイル出力処理でファイルパスを指定する際、下記のようにとりあえず記載してました。

var fileName = AppDomain.CurrentDomain.BaseDirectory + @"\FolderName\fileName";

想定としてはプログラムがあるフォルダにFolderNameというフォルダがあり、その中にfileNameというファイルが生成されるというもの。
Windows環境ではこれで問題なく動くものの、Linux環境に持っていくとファイルが出力されていなかったので確認してみると、プログラムがあるフォルダに FolderName\fileName という名前のファイルが。

Windows環境ではパスにバックスラッシュを使うのに対し、Linux環境ではスラッシュを使うため、上記の指定だとうまくいかないと。なるほど。

というわけで、Linux環境で動かす場合はスラッシュに置き換えればいいんですが、Windows環境でも動かすことを想定すると、Path.Combineを利用してやるのが最適解のようです。

こんな感じ。

var fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "FolderName", "fileName");

そもそもパスの指定方法が適当ってのは気にしないで・・・。

参考

How to handle file name in System.IO classes in a cross-platform manner to make it work on Windows and Linux? For example, I write this code that works perfectly on Windows, however it doesn't cre...
[はてなブックマークで表示]