2

メモ帳以外のファイルを開く方法を考えていました... 私たちの教授は私たちに例を与えました:

s = "notepad.exe test.txt";
system(s.c_str());  

これにより、「notepad.exe」というファイル タイプと「test.txt」というファイル名が開きます。

主な質問:

ここで、Microsoft Excel、Microsoft Word、Visual Studio、7zip など、他の種類のファイルを開く方法があるかどうか疑問に思っていました。

私の試みは、新しい cmd.exe で何かを開きました (START キーワードのため):

fileNeededtoBeOpened = "START \"New Microsoft Office Excel Worksheet.xlsx\"";
system(fileNeededtoBeOpened.c_str());   

(このコードは、ベクターからファイルを開こうとしている元のコードとは少し異なります...)しかし、本当に知る必要があるのは、「notepad.exe」または「START」の代わりに別のコマンドがあるかどうかだけです.txt ではないさまざまな種類のファイルを開く

また、補足として、system() を使用してファイルを開くのは安全ではないことをインターネットで読んでいましたが、これは正しいですか?

私は自分で答えを見つけました...興味がある人のために、ここに答えがあります:

  • テキストファイルを開くには:システム(メモ帳)
  • Excel ファイルを開くには: システム (Excel を起動)
  • Word doc ファイルを開くには: system(start winword)
  • 7z ファイルを開くには: system(start 7zFM)
  • Visual Studio ファイルを開くには: system(start devenv)
4

4 に答える 4

5

私はあなたが混乱していると思います。

システムは、コマンド ラインと同じようにコマンドを実行します (コマンドを取得するには、スタート メニューの実行プロンプトに cmd と入力します)。

したがって、入力notepad.exe test.txtすると次のようになります。

システム パス上にあるプログラムnotepad.exeを開き (コマンド ラインがそのプログラムを実行するためにプログラムを見つけることができるように)、それにパラメーターtest.txtを渡します。

メモ帳自体が をどうするかを決定しtest.txtます。この場合はそれを開きます。

したがって、任意のコマンド (プログラム/実行可能ファイル) を実行し、実際には任意のパラメーターを渡すように指示できます。システム パスに Excel がある場合excel.exeは、システム コマンドから入力して開くことができます。それ以外の場合は、Excel がインストールされている場所を見つけ、excel.exe へのパス全体を参照すると、正常に動作します。

たとえば、私のコンピューターでは、「C:\Program Files\Microsoft Office\Office12\EXCEL.EXE」を実行すると、コマンド ラインから Excel が開きます。メモ帳の例で行ったように、Excel.exe」部分の後に詳細情報 (ファイル名など) を指定することで、さらにパラメーターを渡すことができます。システム コマンドを使用すると、その行が実行されたときに同等の動作が得られます。

于 2012-11-04T19:15:56.767 に答える
2

Windows システムのみをターゲットにしている場合は、ShellExecuteEx 関数 (Win32 API の一部) を使用できます。ファイル名を渡すだけで、そのファイルタイプを処理するために登録されているプログラムが起動されます (Windows エクスプローラーからファイルを開いた場合と同様)。ドキュメントは MSDN で入手できます: http://msdn.microsoft.com/en-us/library/windows/desktop/bb762154(v=vs.85).aspx

アプリケーションの起動 (ShellExecute、ShellExecuteEx、SHELLEXECUTEINFO)に関する MSDN の記事や、インターネット上のその他の場所にいくつかの例があります。

于 2012-11-04T19:28:20.740 に答える
1

他の人が述べたように、システム機能はcmdコマンドのみを実行します..notepad.exeはデフォルトでシステムのパスにあるため、直接機能しますが、たとえば、デスクトップでzipファイルを開きたい場合、私は' d のようなものを入力します

"C:\Program Files\7-Zip\7zFM.exe" Desktop\zipfile.zip

それは、私が現在自分のユーザーのディレクトリにいるときです [デフォルトで] 、または

"C:\Program Files\7-Zip\7zFM.exe" C:\Users\JiMMaR\Desktop\zipfile.zip

[ここで、JiMMaR は Windows 7 での私のユーザー名です] この特定のコマンドは Windows でのみ機能することに注意してください。別の OS を使用している場合、これはそのままでは機能しません。

やってみる

fileNeededtoBeOpened = "\"C:\Program Files\7-Zip\7zFM.exe\" C:\Users\YOUR_USER_NAME\Desktop\zipfile.zip";

それが実行されるかどうかを確認します

編集:スペースをエスケープできない場合は、これを試してください

fileNeededtoBeOpened = "C:\Program~1\7-Zip\7zFM.exe C:\Users\YOUR_USER_NAME\Desktop\zipfile.zip";
于 2012-11-04T19:31:21.423 に答える
0

わかりました、まず - system- は、プログラムに対して別のプロセスを開始する関数です。コマンドを入力するときは、コマンド ウィンドウとほとんど同じです。指定するコマンド ラインは、起動するアプリケーションによって異なります。

ここで、Microsoft Excel、Microsoft Word、Visual Studio、7zip など、他の種類のファイルを開く方法があるかどうか疑問に思っていました。

はい、起動時にこれらのアプリでドキュメントをロードするために指定できるコマンド ライン パラメーターがなかったら、かなりショックを受けるでしょう。(ショックではありませんが、かなり標準的です)

これはc++と関係がありますか-実際には-あなたが言及したアプリケーションのリファレンスを見て、それらのコマンドラインパラメーターが何であるかを確認する必要があります. 次に、文字列をsystem(...)作り、心のコンテンツにします。

于 2012-11-04T19:19:50.527 に答える