C#アプリケーション内からコマンドプロンプトコマンドを実行する方法はありますか?もしそうなら、私はどのように次のことをしますか?
copy /b Image1.jpg + Archive.rar Image2.jpg
これは基本的にJPG画像内にRARファイルを埋め込みます。C#でこれを自動的に行う方法があるかどうか疑問に思っていました。
C#アプリケーション内からコマンドプロンプトコマンドを実行する方法はありますか?もしそうなら、私はどのように次のことをしますか?
copy /b Image1.jpg + Archive.rar Image2.jpg
これは基本的にJPG画像内にRARファイルを埋め込みます。C#でこれを自動的に行う方法があるかどうか疑問に思っていました。
これは、C#からシェルコマンドを実行するために必要なすべてです
string strCmdText;
strCmdText= "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
System.Diagnostics.Process.Start("CMD.exe",strCmdText);
編集:
これは、cmdウィンドウを非表示にするためのものです。
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
process.StartInfo = startInfo;
process.Start();
編集:2
重要なのは、引数がで始まるということ/C
です。そうでないと、機能しません。スコット・ファーガソンのコメント:「文字列で指定されたコマンドを実行してから終了します。」
RameshVel のソリューションを試しましたが、コンソール アプリケーションで引数を渡すことができませんでした。誰かが同じ問題を経験した場合、ここに解決策があります:
using System.Diagnostics;
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();
cmd.StandardInput.WriteLine("echo Oscar");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();
Console.WriteLine(cmd.StandardOutput.ReadToEnd());
var proc1 = new ProcessStartInfo();
string anyCommand;
proc1.UseShellExecute = true;
proc1.WorkingDirectory = @"C:\Windows\System32";
proc1.FileName = @"C:\Windows\System32\cmd.exe";
proc1.Verb = "runas";
proc1.Arguments = "/c "+anyCommand;
proc1.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(proc1);
技術的には、これは提起された質問に直接答えるものではありませんが、元の投稿者がやりたかったこと、つまりファイルを結合する方法の質問には答えます。どちらかといえば、これは初心者が Instance Hunter と Konstantin が話していることを理解するのに役立つ投稿です。
これは、ファイル (この場合は jpg と zip) を結合するために使用する方法です。zip ファイルのコンテンツで満たされるバッファーを作成し (1 回の大きな読み取り操作ではなく、小さなチャンクで)、バッファーは zip ファイルの最後まで jpg ファイルの末尾に書き込まれることに注意してください。到達:
private void CombineFiles(string jpgFileName, string zipFileName)
{
using (Stream original = new FileStream(jpgFileName, FileMode.Append))
{
using (Stream extra = new FileStream(zipFileName, FileMode.Open, FileAccess.Read))
{
var buffer = new byte[32 * 1024];
int blockSize;
while ((blockSize = extra.Read(buffer, 0, buffer.Length)) > 0)
{
original.Write(buffer, 0, blockSize);
}
}
}
}
はい、あります(Matt Hamiltonのコメントのリンクを参照)が、.NETのIOクラスを使用する方が簡単で優れています。File.ReadAllBytesを使用してファイルを読み取り、次にFile.WriteAllBytesを使用して「埋め込み」バージョンを書き込むことができます。
Interaction.Shell("copy /b Image1.jpg + Archive.rar Image2.jpg", AppWinStyle.Hide);