運行命令提示符命令

有沒有辦法從C#應用程序中運行命令提示符命令? 若是是這樣,我將如何作如下事情: shell

copy /b Image1.jpg + Archive.rar Image2.jpg

這基本上在JPG圖像中嵌入了一個RAR文件。 我只是想知道是否有辦法在C#中自動執行此操做。 spa


#1樓

是的,有(見Matt Hamilton評論中的連接),但使用.NET的IO類會更容易也更好。 您能夠使用File.ReadAllBytes來讀取文件,而後使用File.WriteAllBytes來編寫「嵌入式」版本。 code


#2樓

這就是你要作的就是從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


#3樓

雖然從技術上講這並無直接回答提出的問題,但它確實回答瞭如何作原始海報想要作的事情:組合文件。 若是有的話,這是一篇幫助新手瞭解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);
            }
        }
    }
}

#4樓

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);

#5樓

試過@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());
相關文章
相關標籤/搜索