2017-10-02 28 views
0

私はGetFullPathNameとWinExecを使用しています。 文字列内の文字を/文字に変更するにはどうすればよいですか?

WINEXECは私の外部プログラムを呼び出すために

は適切に私はプログラムへの完全なパスを持っている必要があります。私はWINEXECにこのパスを使用する場合

GetFullPathName()は次の値を返します...

C:\job\curr01\help\hlp.exe 

、何も起こりません。 「:/job/curr01/help/hlp.exe C」WINEXECに()それだけで正常に動作して開きますWINEXECが...

C:/job/curr01/help/hlp.exe 

を期待しているので、私のハードコード文字列があればこれは私がこれを知っていますプログラム。

私の質問は、私は「\」のための私の文字列をスキャンし、「/」に置き換えることができる方法ですか?

'\' 私は特殊文字と、次は動作しません... helpPath = 'C:\ジョブ\ curr01の\ヘルプ\のhlp.exe' 以下

for (char* p = helpPath; p = strchr(p, "\"); ++p) { 
    *p = "/"; 
} 

Cがあります"\"は特殊文字なので問題です。私は ""と "//"試しましたが、何も動作していないようです。

+0

これは私が思っているものの反対です。 \ – user3622460

答えて

3

はこれを試してみてください:

if (*p == '\\') //Escape the character '\' 
    *p = '/'; 
+0

で置き換えられているかどうかを確認するのは素晴らしいことです。まだcurr01の後に/ Program/Binをパスに追加するので、ファイルを正しく開くことはできませんが、それは別の問題です。ありがとう – user3622460

+0

ニース、解決策として投稿を設定する答えを有効にできますか?あなたが問題を解決できない場合は、質問を投稿してください。) – YaatSuka

0

私はWinExecが実際にディレクトリの区切りとして "/" 期待していないと思います。 Win32 APIコールの「優先」セパレータはまだ「\」と考えています。いくつかのWin32 API関数に「/」のサポートが追加されました.Windows以外のものに慣れ親しんだり、Cの文字列リテラルで "\"を使用することで発生する問題を避けることができます。あるいは、マイクロソフトだけが理解できる他の理由があるかもしれません。

は、いずれにせよ、あなたはおそらくそれを倍にすることによって、「\」のエスケープ効果を修正する必要があります: c:\\path\\to\\my\\exe。これは、(IIRC)がいくつかの場所では動作するが、他の場所では動作しないフォワードスラッシュを使用するよりも、問題を解決するWindows-yの方法です。

私は、これは本当に新しい答えではないことを理解するが、私はあなたがWindowsのパスと同様の問題を持っているように見える他の質問をしていることに注意してください。

関連する問題