有沒有辦法從C#應用程序中運行命令提示符命令? 若是是這樣,我將如何作如下事情: shell
copy /b Image1.jpg + Archive.rar Image2.jpg
這基本上在JPG圖像中嵌入了一個RAR文件。 我只是想知道是否有辦法在C#中自動執行此操做。 spa
是的,有(見Matt Hamilton評論中的連接),但使用.NET的IO類會更容易也更好。 您能夠使用File.ReadAllBytes來讀取文件,而後使用File.WriteAllBytes來編寫「嵌入式」版本。 code
這就是你要作的就是從C#運行shell命令 ip
string strCmdText; strCmdText= "/C copy /b Image1.jpg + Archive.rar Image2.jpg"; System.Diagnostics.Process.Start("CMD.exe",strCmdText);
編輯: 字符串
這是爲了隱藏cmd窗口。 get
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 cmd
重要的是,參數以/C
開頭,不然它將無效。 Scott Ferguson如何說:「執行字符串指定的命令,而後終止。」 string
雖然從技術上講這並無直接回答提出的問題,但它確實回答瞭如何作原始海報想要作的事情:組合文件。 若是有的話,這是一篇幫助新手瞭解Instance Hunter和Konstantin正在談論的內容的帖子。 it
這是我用來組合文件的方法(在本例中是jpg和zip)。 請注意,我建立了一個緩衝區,其中填充了zip文件的內容(在小塊中而不是在一個大的讀取操做中),而後緩衝區被寫入jpg文件的後面,直到zip文件的末尾是到達: io
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); } } } }
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);
試過@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());