ファイルを検索するとき、アプリケーションはどこを見ますか? どこで作成されますか?常に絶対パスを指定することはほとんど現実的ではありません。たとえば、Visual Studio 2010 アプリで使用するテキスト ファイルをプロジェクト ソリューションのローカル ビンに保存しようとしましたが、常に実行時エラーが発生しました。
2 に答える
通常は、呼び出し元のフォルダーです。次を使用して見つけることができます_getcwd
:http://msdn.microsoft.com/en-us/library/sf98bd4y%28VS.80%29.aspx
相対パスを使用する場合、指定したパスはプロセスの作業ディレクトリと結合されます。
GUI プロセスの作業ディレクトリを制御し続けることは非常に困難です。これは、GUI プロセスがさまざまな方法で開始される傾向があるためです。さらに、ファイル ダイアログは作業ディレクトリを変更する傾向があります。最後に、作業ディレクトリはプロセス内のすべてのスレッド間で共有され、任意のスレッドで変更できます。落とし穴がたくさんあります。
したがって、GUI プロセスでは相対パスを使用しないことをお勧めします。または、相対パスを使用する場合は、使用する前に絶対パスに変換します。そして、明確に定義されたルート パスに対してその変換を実行します。
ポータブル アプリを作成している場合を除き、実行可能ファイルを含むディレクトリに保存できるとは思わないでください。最近のシステムでは、実行可能ファイルは読み取り専用ディレクトリにあることがよくあります。
ユーザー設定を保存する場合は、ユーザーのプロファイルの適切な場所に保存します。
一方、決して変更しないファイルを読みたい場合は、それらを実行可能ファイルと一緒に保存するのが合理的です。ただし、その場合でも、完全な絶対パスを使用してファイルを開きます。実行可能ファイルを含むディレクトリとファイルへの相対パスを組み合わせて、そのパスを作成します。
要約すると、あなたは次のように言いました。
常に絶対パスを指定することはほとんど現実的ではありません。
しかし、私は同意しません。私は、絶対パスを使用することが最良の選択肢であることが非常に多いと反論します。ただし、絶対パスをハードコーディングする必要はありません。実行時に作成できますし、作成する必要があります。