gpt4 book ai didi

c# - 当一个文件缺少 EOF 时,如何在 C# 程序中将多个 gz 文件合并为一个文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:50 26 4
gpt4 key购买 nike

我在一个目录中有多个 .gz 文件(2 个或更多),至少有一个文件缺少文件结尾标记。我们的 C# 进程无法读取缺少文件结尾的文件,但由于它们来自第三方,我们无法控制它们的创建方式。

因此,我们一直在手动运行以下 Linux 命令:

cat file1.gz file2.gz > newFile.gz

为了自动执行此操作,我正在寻找一种方法来利用 C# 中的 Process 功能来触发相同的命令,但这只能在 Cygwin 或其他一些 Linux shell 中使用。在我的示例中,我使用的是 git bash,但它可以是 Powershell 或 Cygwin 或在 Windows 机器上运行的任何其他可用的 Linux shell。

以下代码没有失败,但没有按预期工作。我想知道是否有人对如何执行此操作有任何建议,或者对要考虑的不同方法有任何建议?

假设工作目录已设置并成功初始化,因此文件存在于进程运行的位置。

Process bashProcess = new Process();
bashProcess.StartInfo.FileName = @"..\Programs\Git\git-bash.exe";
bashProcess.StartInfo.UseShellExecute = false;
bashProcess.StartInfo.RedirectStandardInput = true;
bashProcess.StartInfo.RedirectStandardOutput = true;

bashProcess.Start();

bashProcess.StandardInput.WriteLine("cat file1.gz file2.gz > newFile.gz");
bashProcess.StandardInput.WriteLine("exit");
bashProcess.StandardInput.Flush();
.
.
.
bashProcess.WaitForExit();

我的期望是创建了 newFile.gz

最佳答案

我能够使用 DOS 命令找到问题的解决方案,并从 CSharp 生成一个 cmd 进程。

我的代码现在看起来像这样,避免了必须从 Windows 启动基于 linux 的 shell,并且 Windows 中的复制命令与 cat 执行相同的操作:

Process proc = new Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "cmd";
proc.StartInfo.Arguments = @"/C pushd \\server\folder && copy *.txt.gz /b
combined.gz";
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
proc.WaitForExit();

System.Threading.Thread.Sleep(2000);
string line = proc.StandardOutput.ReadLine();

while (line != null)
{
output.Append(line);
line = proc.StandardOutput.ReadLine();
}

关于c# - 当一个文件缺少 EOF 时,如何在 C# 程序中将多个 gz 文件合并为一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56656521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com