1

次の答えは、C#を使用した解決策を示しています。c++(c ++ \ cliではなく)のみを使用した場合、同等のものはどうなるのでしょうか。

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);

トリックを行う可能性のあるブーストに何かありますか?

この問題に基づいて、私は次のことを行ってきました。ファイルI/Oを使用してwin32サービスを正しく作成して実行する

4

3 に答える 3

8

SetCurrentDirectory(Win32の場合):

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365530%28v=vs.85%29.aspx

current_pathboost::filesystem

http://www.boost.org/doc/libs/1_51_0/libs/filesystem/doc/reference.html#current_path

BaseDirectoryに相当するものはGetModuleFileName、(最初​​の引数にnullハンドルを使用して)、その後GetFullPathNameに実行可能パスからディレクトリを取得することです。

于 2012-09-03T21:43:58.113 に答える
4

Windowsでは、

System.IO.Directory.SetCurrentDirectory ( System.AppDomain.CurrentDomain.BaseDirectory )` 

だろう:

// Get full executable path
char buffer[MAX_PATH];
GetModuleFileName(NULL, buffer, MAX_PATH);

// Get executable directory
boost::filesystem::path path(buffer);
path = path.parent_path();

// Set current path to that directory
boost::filesystem::current_path( path );

C ++は標準のディレクトリの概念を認識しないため、アプリケーションのディレクトリを取得するためのプラットフォームに依存しない方法はないことに注意してください。Boostにも同等の機能はないようです。

于 2012-09-03T21:58:01.720 に答える
4

SetCurrentDirectoryWINAPIを使用します。

Windowsの_chdirとSetCurrentDirectoryの違いは何ですか?で利用可能なもう1つの答えがあります。

おそらくモジュール名も必要です(コメントからのようです)、これは私の古い店からのものです:-

int main()
{
  char path[MAX_PATH]={0};
  GetModuleFileName(0,path,MAX_PATH);
}
于 2012-09-03T21:47:22.760 に答える