Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Запуск deflate из программы

#c_sharp


Необходимо запустить программу deflate.exe и передать файл, который нужно сжать и
имя нового файла.


  C:\Users>C:...\deflate.exe < C:...\file.bin > C:...\arph.z


Файл для сжатия должен быть в "<>".
Все срабатывает верно.
Но мне необходимо запустить deflate из другой программы и тут я столкнулся с проблемой.

Код программы:

Process pr = new Process();

pr.StartInfo.FileName = @"C:\...\deflate.exe";
pr.StartInfo.Arguments = @" C:\...\arph.z";

pr.Start();
pr.WaitForExit()


Данная программа не срабатывает. Открывается консоль основного .exe и окно deflate.exe
(если не указывать pr.StartInfo.CreateNoWindow = true и так далее).
Есть какие-нибудь соображения или замечания по этому поводу?
    


Ответы

Ответ 1



<> и имена файлов - это не параметры deflate.exe. Это инструкции для командного процессора по перенаправлению ввода-вывода. Вы запускаете deflate.exe напрямую - перенаправление не работает. Вам нужно запускать сам командный процессор - cmd с параметром /c, который выполняет остаток строки как команду Process pr= new Process(); pr.StartInfo.WorkingDirectory = @"C:\Temp\def"; pr.StartInfo.FileName = "cmd"; pr.StartInfo.Arguments = @"/C deflate.exe < .... > ...."; pr.Start(); А еще лучше - не заморачиватся со сжатием через deflate.exe, а использовать стандартный System.IO.Compression.DeflateStream: using (var output = File.OpenWrite(@"C:\temp\def\sample.txt.z")) { using (DeflateStream deflateStream = new DeflateStream(output, CompressionMode.Compress)) { using (var input = File.OpenRead(@"C:\temp\def\sample.txt")) { input.CopyTo(deflateStream); } } }

Комментариев нет:

Отправить комментарий