Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2016, 12:37   #21
ya_yanchik-2909
Пользователь
 
Регистрация: 15.11.2016
Сообщений: 62
По умолчанию

1)
Цитата:
Сообщение от pu4koff Посмотреть сообщение
archive - путь к архиву. "C:\test\test.zip" или в каком архиве документы искать будете.
Ну так у меня же много будет архивов и я не буду знать, какой как будет называться. Тогда что делать?!
2) И еще, в этой строке
Код:
  psi.Arguments += "\"" + archive + "\"";
надо указать путь нахождения архива? Т.е. папку,где они будут лежать?
psi.Arguments += "F:\нов"" + archive + "F:\нов""; - так что ли?!

3)
Код:
   if (line.StartsWith("Path = "))
- а здесь ничего не нужно писать?!
4) Или просто уже конец рабочего дня и поэтому я торможу, либо все так запущено =)
ya_yanchik-2909 вне форума Ответить с цитированием
Старый 13.12.2016, 13:19   #22
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Переделал немного. Берёте вот этот метод:
Код:
public static IEnumerable<string> GetDocuments(string path7z, string dir, string extFilter = "*.doc *.docx *.rtf")
        {
            var psi = new ProcessStartInfo();
            psi.FileName = path7z;
            psi.Arguments = @" l ";
            psi.Arguments += "\"" + dir + "\" ";
            psi.Arguments += extFilter;
            psi.Arguments += @" -r -slt";
            psi.WindowStyle = ProcessWindowStyle.Hidden;
            psi.RedirectStandardOutput = true;
            psi.UseShellExecute = false;
            psi.StandardOutputEncoding = Encoding.GetEncoding(866);
            var process = Process.Start(psi);
            process.WaitForExit();

            List<string> files = new List<string>();
            string archive = string.Empty;

            const int StateUnknown = 0;
            const int StateArchive = 1;
            const int StateDocuments = 2;

            int state = StateUnknown;

            string line;
            using (var reader = process.StandardOutput)
            {
                line = reader.ReadLine();
                while (line != null)
                {
                    if (line == "--")
                    {
                        state = StateArchive;
                    }
                    else if (line == "----------")
                    {
                        state = StateDocuments;
                    }
                    if (line.StartsWith("Path = "))
                    {
                        if (state == StateArchive)
                            archive = line.Substring("Path = ".Length);
                        else if (state == StateDocuments)
                            files.Add(archive + "\\" + line.Substring("Path = ".Length));
                    }

                    line = reader.ReadLine();
                }
            }

            return files;
        }
и суёте в какой-нибудь класс.
Потом вызываете как-то так:
Код:
var docs = GetDocuments(@"C:\Program Files\7-zip\7z.exe", @"F:\нов\");
Если другие форматы нужны, а не doc, docx и rtf, то третьим параметром указываете всё, что надо:
Код:
var docs = GetDocuments(@"C:\Program Files\7-zip\7z.exe", @"F:\нов\", "*.txt *.doc *.docm");
В итоге в docs будет набор строк с именами файлов типа
F:\нов\1.zip\document.doc
F:\нов\участки\2.7z\document.docx
...
документы вне архивов уже отдельно искать нужно будет
pu4koff вне форума Ответить с цитированием
Старый 13.12.2016, 13:25   #23
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от ya_yanchik-2909 Посмотреть сообщение
Ну так у меня же много будет архивов и я не буду знать, какой как будет называться. Тогда что делать?!
поручить программе искать нужные файлы.
Вы же что-то про них знаете? В какой папке искать знаете?
Какое у них расширение?

гуглите в сторону Directory.GetFiles()
например, найти все zip файлы в папке "F:\нов"
Код:
string[] fileList = Directory.GetFiles(@"F:\нов\", "*.zip");

Цитата:
Сообщение от ya_yanchik-2909 Посмотреть сообщение
И еще, в этой строке
Код:

psi.Arguments += "\"" + archive + "\"";

надо указать путь нахождения архива? Т.е. папку,где они будут лежать?
psi.Arguments += "F:\нов"" + archive + "F:\нов""; - так что ли?!
нет. в этой строчке archive - это имя вашего архивного файла.


Цитата:
Сообщение от ya_yanchik-2909 Посмотреть сообщение
if (line.StartsWith("Path = "))

- а здесь ничего не нужно писать?!
имхо, здесь Вам ничего не нужно менять. это, по всей видимости, разбор результатов выдачи архиватора (он так выдаёт список файлов).



Цитата:
Сообщение от ya_yanchik-2909 Посмотреть сообщение
4) Или просто уже конец рабочего дня и поэтому я торможу, либо все так запущено =)
да, это возможно. что тормозите...
так надо не тормозить. или уже завтра с утречка, на свежую голову сесть и разобраться!



- - - - - - -
УПС!
Опоздал я с ответом!...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.12.2016, 04:51   #24
ya_yanchik-2909
Пользователь
 
Регистрация: 15.11.2016
Сообщений: 62
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
public static IEnumerable<string> GetDocuments(string path7z, string dir, string extFilter = "*.doc *.docx *.rtf")
Спасибо большое! Но есть вопрос, как все-таки будет работать этот метод?! При загрузке я смогу загрузить и документы Word,и архивные файлы? И он мне все раскидает?!
Все-равно немного недопонимаю =(
ya_yanchik-2909 вне форума Ответить с цитированием
Старый 19.12.2016, 10:01   #25
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от ya_yanchik-2909 Посмотреть сообщение
Спасибо большое! Но есть вопрос, как все-таки будет работать этот метод?! При загрузке я смогу загрузить и документы Word,и архивные файлы? И он мне все раскидает?!
Все-равно немного недопонимаю =(
Этот метод выдаст только перечень файлов указанного формата, которые находятся в архивах. Которые без архива лежат, искать нужно отдельно.
Чего тут вообще понимать? Натравите метод на какую-нибудь свою папку с известным перечнем документов и архивов и смотрите какие файлы он найдёт.
pu4koff вне форума Ответить с цитированием
Старый 19.12.2016, 10:45   #26
ya_yanchik-2909
Пользователь
 
Регистрация: 15.11.2016
Сообщений: 62
По умолчанию

Ну т.е. при нажатии на кнопку "Загрузить файл" я выбираю архив.
Да не получается, выдает ошибку " Необработанное исключение..." вообще при работе со строкой, с i. Не могу даже посмотреть.
ya_yanchik-2909 вне форума Ответить с цитированием
Старый 19.12.2016, 11:06   #27
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

В функцию нужно передать путь к файлу 7z.exe, путь к папке, в которой она будет искать архивы с документами, по желанию можно передать маски расширений искомых документов. как вы это всё будете передавать, я уже не знаю.
pu4koff вне форума Ответить с цитированием
Старый 22.08.2019, 15:19   #28
sdg1208
 
Регистрация: 22.08.2019
Сообщений: 6
По умолчанию делаю разархивацию файла

Добрый день!
Подскажите начинающему...

кусок кода (делаю разархивацию файла)

Код:
            //Показывает из listBox1 имя выбранного файла в textBox2
            string item1 = "";
            foreach (var i in listBox1.SelectedIndices)
            {
                item1 += listBox1.Items[(int)i] + Environment.NewLine;
            }
            textBox2.Text = item1;
            //Показывает дату выбранного файла в textBox1
            string path = "" + value11 + "" + item1 + "";
            DateTime dt = File.GetLastWriteTime(path);
            textBox1.Text = dt.ToString("dd.MM.yyyy");
            //Разархивация
            try
            {
                string FileName = @"C:\Program Files\WinRAR\WinRAR.exe";
                string arguments = string.Format(@"x ""{0}"" *.* ""{1}""", "" + value11 + "\\" + item1 + "", value11);
                Process.Start(FileName, arguments);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
Вот и разархивация не проходит. А если " + item1 + " заменить на конкретное имя файла, то всё нормально разархивируется.
Как можно достичь успеха?
Имя архивного файла всегда меняется.
______________________
Используйте тег [CODE] (кнопка [CODE] в форме сообщения) при вставке кода на форум. Подробнее в FAQ

Последний раз редактировалось Alex11223; 22.08.2019 в 15:42.
sdg1208 вне форума Ответить с цитированием
Старый 22.08.2019, 16:17   #29
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Что такое value11 ?

покажите, что в процессе запуска в строке arguments
(например,
Код:
  File.WriteAllLines( @"D:\Temp\debug.txt", arguments);
)

какую ошибку возвращается WinRar ?

права на запись в каталог есть?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.08.2019, 17:02   #30
sdg1208
 
Регистрация: 22.08.2019
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Что такое value11 ?

покажите, что в процессе запуска в строке arguments
(например,
Код:
  File.WriteAllLines( @"D:\Temp\debug.txt", arguments);
)

какую ошибку возвращается WinRar ?

права на запись в каталог есть?
value11 - это у меня путь к архивам, хранится в файле Settings.ini

Ваш код не могу выполнить, пишет - Аргумент 2:не могу преобразовать из "string" в "string[]"
Через MessageBox.Show(arguments); посмотрел.
Показал вот это - х "C:\архивы\Отчет.rar
" *.* "C:\архивы"
(Ну это схематично, путь другой)

Выдает ошибку - Архивы не найдены.

Права есть, если указываю любой имеющийся файл в папке по пути value11, то архивация проходит успешно.

Последний раз редактировалось sdg1208; 22.08.2019 в 17:37.
sdg1208 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему тормозит распаковка tar-архивов в Windows? R_G Windows 4 27.01.2016 20:37
Создание распаковщика архивов. crymchanin Общие вопросы C/C++ 1 01.02.2012 13:38
Распаковка архивов Starscream Общие вопросы Delphi 2 25.06.2009 23:26
Использование MPQ архивов Smitt64 Общие вопросы C/C++ 0 27.02.2009 18:18
Восстановители архивов DM_bite Софт 5 08.08.2008 11:13