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);
}
}
}
}
11 回答
您可以在一行中使用CliWrap执行此操作:
这就是你需要从C#运行shell命令
EDIT:
这是为了隐藏cmd窗口 .
EDIT: 2
重要的是,参数以
/C
开头,否则无效 . 如何Scott Ferguson说:它"Carries out the command specified by the string and then terminates."参考Microsoft.VisualBasic
你可以使用简单的代码编写
.bat
格式的扩展名,批处理文件的代码:c:/ copy /b Image1.jpg + Archive.rar Image2.jpg
使用这个c#代码:
Process.Start("file_name.bat")
试过@RameshVel解决方案,但我无法在我的控制台应用程序中传递参数 . 如果有人遇到同样的问题,这是一个解决方案:
您可以使用以下方法实现此目的(如其他答案中所述):
当我尝试上面列出的方法时,我发现我的自定义命令无法使用上面某些答案的语法 .
我发现需要将更复杂的命令封装在引号中才能工作:
虽然从技术上讲这并没有直接回答提出的问题,但它确实回答了如何做原始海报想要做的事情:组合文件 . 如果有的话,这是一篇帮助新手了解Instance Hunter和Konstantin正在谈论的内容的帖子 .
这是我用来组合文件的方法(在本例中是jpg和zip) . 请注意,我创建了一个缓冲区,其中填充了zip文件的内容(在小块中而不是在一个大的读取操作中),然后缓冲区被写入jpg文件的后面,直到zip文件的末尾是到达:
是的,有(参见Matt Hamilton评论中的链接),但使用.NET的IO类会更容易也更好 . 您可以使用File.ReadAllBytes来读取文件,然后使用File.WriteAllBytes来编写“嵌入式”版本 .
这里有一些简单的代码版本 . 它也会隐藏控制台窗口 -
由于某些原因,上述答案都没有帮助,似乎他们在地毯下扫除错误并且难以排除故障 . 所以我最终得到这样的东西,也许它会帮助别人: