Unity(C#)でファイル書き込みをしようとした際にエラーが出ました.
あまりUnityやC#について日本語で書かれているものが見つからなかったので,残しておきます.
Empty path name is not legal. とは
これで検索をかけたところファイル名に使用できない文字が含まれていないか?
という原因がありましたが,
自分の場合は呼び出し位置の変更によってエラーが出たため、
ファイルパスには問題がないことが分かっていました。
⇒Empty path name is not legal.
は単純に和訳しても「空のパス名は違法です」なので,
上記で言っていることは全く違いますね……
全然日本語の記事が見つからなかったので,
素直に英文の意味を考えればこんなに悩むエラーでもなかったです.反省.
エラー箇所
エラーが出たのは下記の記述部分でした.
最初はa,b,cを同じ関数の中で定義していたことから,
関数に引数を渡す時点(もしくは渡す前)に文字コード周りで
エラーが起きているのかな?と思いましたがそういうわけでもなく……
public void WriteHeader(string a,string b,string c){
using (StreamWriter sw = new StreamWriter(filepath, false, Encoding.GetEncoding("Shift_JIS")))
{
string[] s1 = { a,b,c };
string s2 = string.Join(",", s1);
sw.WriteLine(s2);
}
}
結局,原因は?
Unityでありがちな問題ですがStart()の実行順序関連でした.
自分の場合はfilepathを同じクラスのStart()で定義しており,
それより前に別のクラスからWriteHeader()関数を呼び出しているため,
「FilePath」が見つからない,というようなエラーだったようです.
(それならもっと他のエラーが出てもよさそうな気はしますが……)
しかし,Start()の実行順は確か決まりがなかった気がするけど,
どうやって確実に元ファイルのStart()を実行後にこの関数を呼び出せるだろうか?
ということで調べなおしてみたところこんな記事がありました.
https://ekulabo.com/execution-order
どうやらスクリプトの実行順をEdit>Project Settingsから設定できるようです.
よくここまでこれ無しでやってきたもんだな……という便利さなので,
使ったことのない人,同じようなエラーで実行順に悩んでいる人がいたら(いるのか?)
ぜひ一度お試しいただければと思います.