4

私は現在、自分のプログラムでプログラム(パワーポイントなど)を実行し、その横に開きたいファイルへのパスを作成することに取り組んでいます。私のプログラムは、次を使用してファイルのパスを取得しています。

dirIter2->path()

プログラムとファイルの 2 つのパスを取得し、それらを 1 つの文字列としてマージして、次のように渡します。

system(PathTotal.c_str())

これはうまく機能していますが、私の唯一の問題は、ファイル名の名前にスペースが含まれている場合、コマンドプロンプトでファイルが見つからないと表示されることです(最初のスペースに到達するとファイル名が終了すると見なされるためです。ラップしようとしました引用符で囲まれていますが、ラップする必要があるのは実際のファイル名です (たとえば、「C:\users\bob\john is cool」を試しましたが、次のようにする必要があります: C:\users\bob\"johnかっこいいです」)

これを修正する方法について何か提案はありますか? ファイルの場所へのフォルダーへのパスを取得してから、ファイル名を取得することを考えていました。ファイル名を引用符で囲み、それをフォルダーのパスに追加します。上記のように ->path() を使用してみましたが、唯一の問題は、フォルダーのディレクトリの外にしか移動しないことですか?

ファイルを取得せずにファイルへの enitre パスを取得できるブースト コマンドはありますか?

誰かがより良い提案を持っている場合、私はこの考えにコミットしていません

ありがとう

4

3 に答える 3

1

C と C++ の両方で、'\' はエスケープ文字です。特定のもの ('\n' や '\t' など) については、制御コードを挿入します。それ以外の場合は、次の文字が表示されます。

したがって、次のようなことをすると:

fopen("C:\users\bob\john is cool", "r");

という名前のファイルを開こうとします。

C:usersbobjohn is cool

出力に「\」文字が必要な場合は、エスケープする必要があります。したがって、次のようにします。

fopen("C:\\users\\bob\\john is cool", "r");

Windows と Visual Studio では、Unix スタイルのセパレーターもうまく使用できました。

fopen("C:/users/bob/john is cool", "r");

実際、それらを混同することができます:

fopen("C:/users\\bob/john is cool", "r");
于 2010-11-15T02:50:27.620 に答える
0

Cの文字列操作に詳しくないのですが、次のようなことは簡単にできませんでしたか?

int i = path.lastIndexOf("\\"); //Find the index of the last "\"
String quotedPath = path.substring(0, i+1); //Get the path up until the last "\"
quotedPath += "\"" + path.substring(i+2) + "\""; //Add quotes and concatenate the filename

Javaについては申し訳ありませんが、私がよく知っているJavaに最も近いものです。誰かがコードを同等の C に編集できる場合に備えて、これをコミュニティ wiki にしました。

于 2010-11-14T23:14:30.620 に答える
0

また、次のようにスペースをエスケープする必要がある場合があることも付け加えておきます。

cmd.exe -C C:/Program\ Files/Application\ Folder/Executable\ with\ spaces.exe

また

cmd.exe -C C:\\Program\ Files\\Application\ Folder\\Executable\ with\ spaces.exe

于 2010-11-16T04:17:31.887 に答える