Я новичок в программировании, так что наберитесь терпения.
В настоящее время я разрабатываю небольшую программу в Visual С# 2010 Express, .NET Framework 4.0, которая запускает сценарий на компьютере с Linux (что создает файл /tmp/logs.tgz), загружает файл, а затем я хочу извлечь его. Запуск скрипта и загрузка файла через Renci.SshNet работает без нареканий. Но когда я хочу извлечь его, он выдает ошибку «NotSupportedException», что мой формат пути к файлу неверен (я думаю, что это не так?). Я копирую и вставляю код прямо из здесь (простой полный экстракт из TGZ (.tar.gz)) и отредактировал его для своих нужд:
using System.IO;
using System.IO.Compression;
using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.Tar;
//it executed the Script and created the file on the Linux Machine /tmp/logs.tgz
//now I want to download it
string myTime = DateTime.Now.ToString("yyyyMMdd");
var pathWithEnv = (@"%USERPROFILE%\Desktop\logs" + myTime + ".tgz");
var filePath = Environment.ExpandEnvironmentVariables(pathWithEnv);
string localFile = filePath;
//then downloads /tmp/logs.tgz to ..\Desktop\logs+ myTime +.tgz
//everything great until now. here I want to extract .TGZ:
var pathWithEnv2 = (@"%USERPROFILE%\Desktop\logs" + myTime);
var fileDir = Environment.ExpandEnvironmentVariables(pathWithEnv2);
string localDir = fileDir;
Stream inStream = File.OpenRead(localFile);
Stream gzipStream = new GZipInputStream(inStream);
TarArchive tarArchive = TarArchive.CreateInputTarArchive(gzipStream);
//ERROR OCCURS HERE:
tarArchive.ExtractContents(localDir);
tarArchive.Close();
gzipStream.Close();
inStream.Close();
Я даже пытался установить строки localFile и localDir без EnviromentVariable, но это не помогло. Я попытался: - загрузить и извлечь его прямо на C:\ (или на подключенный сетевой диск U:), чтобы предотвратить слишком длинные имена файлов (чего не должно быть, поскольку длина никогда не должна превышать 86 символов). - string = @"C:..\logs", string = "C:\..\logs", string = @"C:..\logs\" и т.д. - пробовал без myTime - с использованием ICSharpCode.SharpZipLib .Основной;
Я сделал MessageBox.Show(localDir); перед tarArchive.ExtractContents(localDir); и он показал «C:\Users\Baumann\Desktop\logs20140530», что правильно, это каталог, в который я хочу его извлечь. Даже создание каталога перед его выполнением не помогает.
Я также создал новый проект всего с одной кнопкой, которая должна запустить извлечение, и возникает та же ошибка.
Я попытался, делая это отдельно, сначала извлечь GZip, а затем .tar, но это также дает мне ту же ошибку при извлечении GZip (используя ICSharpCode.SharpZipLib.Core; конечно).
Что меня еще больше сводит с ума, так это то, что он начинает извлекать его, но не все, до того, как он выйдет из строя. И всегда одни и те же Файлы, что для меня непонятно, почему эти, а почему не другие.
Я использую Windows 8.1, использую SharpZipLib 0.86.0.518, загруженную непосредственно с веб-сайта.
Заранее спасибо.