for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Вопросы по 1С
  

получение отчета о работе от 7z
djeday
Автор

Сообщений: 7
Дата: 11.08.11 07:21:53
Доброго времени суток всем! Есть такая задача. Через 1С разархивировать кучу файлов в формате 7z с помощью программки 7z.exe из пакета программы 7zip. Все отрабатывает красиво и правильно. НО! Если файл архива поврежден - 7z его не распаковывает и идет дальше. Нужно в программе 1С сообщать о том что файл поврежден. У программы 7z.exe есть коды на выходе:
Цитата:
Exit Codes from 7-Zip
7-Zip returns the following exit codes:

Code Meaning
0 No error
1 Warning (Non fatal error(s)). For example, one or more files were locked by some other application, so they were not compressed.
2 Fatal error
7 Command line error
8 Not enough memory for operation
255 User stopped the process

Вот код как вызываю 7z в 1С:
ПрограммаАрхивации = "c:\Program Files\7-Zip\7z.exe";  
  МассивНайденныхФайлов = НайтиФайлы(КаталогФайлов, "*.7z");   
  Для Каждого Файл из МассивНайденныхФайлов Цикл   
  КаталогРазархивирования = КаталогФайлов + "\00";  
  РазархивироватьФайл(ПрограммаАрхивации, Файл.ПолноеИмя, КаталогРазархивирования);  
  КонецЦикла;   
  ...  
  Процедура РазархивироватьФайл(Программа, Файл, Каталог) Экспорт   
  	//e - разархивировать  
  	//-y - ответить Да на все запросы  
  	//-o - установить каталог выхода  
  	КоммандаЗапуска = Программа + " e " + Файл + " -y -o" + Каталог;  
  	ЗапуститьПриложение(КоммандаЗапуска, Каталог, Истина);  
  КонецПроцедуры
Как мне получить в 1С сообщения о том, что 7z не смог допустим распаковать файл???
Ratings: 0 negative/0 positive

Re: получение отчета о работе от 7z
PaulWist

Сообщений: 13134
Дата: 11.08.11 10:20:58
forum.foxclub.ru


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive

Re: получение отчета о работе от 7z
djeday
Автор

Сообщений: 7
Дата: 11.08.11 11:47:26
Идея понятна и вроде все сделал как надо. НО! Результат не тот какой ожидалось.
Вот новый код:
Оболочка = Новый COMObject("wScript.Shell");  
  ПрограммаАрхивации = "c:\Program Files\7-Zip\7z.exe";    
  МассивНайденныхФайлов = НайтиФайлы(КаталогФайлов, "*.7z");     
  Для Каждого Файл из МассивНайденныхФайлов Цикл     
  	КаталогРазархивирования = КаталогФайлов + "\00";    
  	КоммандаЗапуска = "cmd /C " + ПрограммаАрхивации + " e " + Файл.ПолноеИмя + " -y -o" + КаталогРазархивирования;  
  	ОтветОболочки = Оболочка.Run(КоммандаЗапуска, 0, Ложь);  
  	Если ОтветОболочки = 0 Тогда   
  		Сообщить("Все нормально.");  
  	ИначеЕсли ОтветОболочки = 1 Тогда   
  		Сообщить("Предупреждение: файл для разархивирования занят!");  
  	ИначеЕсли ОтветОболочки = 2 Тогда   
  		Сообщить("Критическая ошибка разархивирования!");  
  	ИначеЕсли ОтветОболочки = 7 Тогда   
  		Сообщить("Критическая ошибка в командной строке разархивирования!");  
  	ИначеЕсли ОтветОболочки = 8 Тогда   
  		Сообщить("Недостаточно памяти для разархивирования!");  
  	ИначеЕсли ОтветОболочки = 255 Тогда   
  		Сообщить("Процесс разархивирования прерван пользователем!");  
  	Иначе   
  		Сообщить("Неизведанная ошибка!");  
  	КонецЕсли;  
  КонецЦикла;
Если пишешь ОтветОболочки = Оболочка.Run(КоммандаЗапуска, 0, Ложь); - он ничего не делает и не показывает, отвечает -
Цитата:
"Все нормально."
Если пишешь ОтветОболочки = Оболочка.Run(КоммандаЗапуска, 0, Истина); - он ничего не делает, что-то показывает, отвечает -
Цитата:
"Предупреждение: файл для разархивирования занят!"
Может я что то делаю не так?
В первом посте через процедуру он хоть разархивировал - а тут совсем не фурычит шарманка (((
Ratings: 0 negative/0 positive

Re: получение отчета о работе от 7z
djeday
Автор

Сообщений: 7
Дата: 11.08.11 12:57:41
PaulWist
http://forum.foxclub.ru/read.php?29,493895,493936#msg-493936
мало того - попробовал через foxpro тоже самое - результат такой же!
Цитата:
Предупреждение: файл для разарх./арх. занят
вот код программки:
l7z = "c:\Program Files\7-Zip\7z.exe"  
  lfile = "c:\temp\proba.7z"  
  lfolder = "c:\temp\00"  
  lcommandstring = "cmd /C " + l7z + " e " + lfile + " -y -o" + lfolder   
    loShell = CREATEOBJECT("Wscript.Shell")     
    lnResult = loShell.Run(lcommandstring,0,.T.) && параметр .T. кагбе намекает на подождать пока не закончится процесс    
         
    DO CASE     
       CASE lnResult = 0 && Всё хорошо, делаем команды    
            ?lfile   
       CASE lnResult = 1      
            MESSAGEBOX('Предупреждение: файл для разарх./арх. занят',0+16+0,'Ошибка')         
       CASE lnResult = 2      
            MESSAGEBOX('Критическая ошибка разарх./арх.',0+16+0,'Ошибка')    
       CASE lnResult = 7    
            MESSAGEBOX('Критическая ошибка в '+CHR(13)+'командной строке разарх./арх.',0+16+0,'Ошибка')    
       CASE lnResult = 8    
            MESSAGEBOX('Недостаточно памяти для разарх./арх.',0+16+0,'Ошибка')    
       CASE lnResult = 255    
            MESSAGEBOX('Процесс разарх./арх. прерван пользователем',0+16+0,'Ошибка')     
       OTHERWISE           
            MESSAGEBOX('Неизведанная ошибка',0+16+0,'Ошибка')     
    ENDCASE

Может еще какие способы будут как мне получить из 1с коды ошибок от программы 7z???



Исправлено: djeday, 11.08.11 13:05
Ratings: 0 negative/0 positive

Re: получение отчета о работе от 7z
Foxtrot

Сообщений: 3378
Откуда: Куда:
Дата: 11.08.11 15:42:32
если нужен отлов ошибки, то наверное только через Новый COMОбъект()


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите
Ratings: 0 negative/0 positive

Re: получение отчета о работе от 7z
PaulWist

Сообщений: 13134
Дата: 11.08.11 20:30:05
lcommandstring = "cmd /C " + ['] + l7z + " e " + lfile + " -y -o" + lfolder + [']


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive

Re: получение отчета о работе от 7z
djeday
Автор

Сообщений: 7
Дата: 12.08.11 05:14:30
PaulWist
lcommandstring = "cmd /C " + ['] + l7z + " e " + lfile + " -y -o" + lfolder + [']
тоже самое -
Цитата:
Предупреждение: файл для разарх./арх. занят
Может у меня что то с системой? Кто нибудь попробуйте хотя бы на FoxPro код - что выдаст?
Ratings: 0 negative/0 positive

Re: получение отчета о работе от 7z
djeday
Автор

Сообщений: 7
Дата: 12.08.11 07:34:42
Все - сам разобрался!
Если пишешь путь к программе "c:\temp\7z.exe", а не "c:\Program Files\7-Zip\7z.exe" - все делает на ура!! (соответственно 7z.exe должно там лежать)
Код на FoxPro:
l7z = "c:\temp\7z.exe"    
    lfile = "c:\temp\proba.7z"    
    lfolder = "c:\temp\00"    
    lcommandstring = "cmd /C " + l7z + " e " + lfile + " -y -o" + lfolder   
 *!*	lcommandstring = "cmd /C ping 127.0.0.1"    
    loShell = CREATEOBJECT("Wscript.Shell")     
    lnResult = loShell.Run(lcommandstring,0,.T.)     
    MESSAGEBOX(STR(lnResult))  
      DO CASE       
         CASE lnResult = 0 && Всё хорошо, делаем команды      
              ?lfile     
         CASE lnResult = 1        
              MESSAGEBOX('Предупреждение: файл для разарх./арх. занят',0+16+0,'Ошибка')           
         CASE lnResult = 2        
              MESSAGEBOX('Критическая ошибка разарх./арх.',0+16+0,'Ошибка')      
         CASE lnResult = 7      
              MESSAGEBOX('Критическая ошибка в '+CHR(13)+'командной строке разарх./арх.',0+16+0,'Ошибка')      
         CASE lnResult = 8      
              MESSAGEBOX('Недостаточно памяти для разарх./арх.',0+16+0,'Ошибка')      
         CASE lnResult = 255      
              MESSAGEBOX('Процесс разарх./арх. прерван пользователем',0+16+0,'Ошибка')       
         OTHERWISE             
              MESSAGEBOX('Неизведанная ошибка',0+16+0,'Ошибка')       
      ENDCASE
На 1С тоже все работает, стоит только заменить путь к 7z.
С проблемой использования составных путей к нужным программам буду заниматься позже - пока только вот так.



Исправлено: djeday, 12.08.11 07:35
Ratings: 0 negative/0 positive

Re: получение отчета о работе от 7z
djeday
Автор

Сообщений: 7
Дата: 12.08.11 11:15:44
djeday
С проблемой использования составных путей к нужным программам буду заниматься позже - пока только вот так.
Поправочка для FoxPro, в полном пути к 7z.exe можно использовать составные названия папок (работает только с двойными кавычками).
lcommandstring = "cmd /c " + ["] + l7z + ["] + " e " + lfile + " -y -o" + lfolder
Для установки папки, куда распаковывать, если в ее полном пути есть составные названия - кавычки не помогают - лечится путем перехода в нужную папку и из нее вызывать 7z для распаковки (switch -o не нужен).
Аналогично в 1С.



Исправлено: djeday, 12.08.11 11:27
Ratings: 0 negative/0 positive

Re: получение отчета о работе от 7z
Taran

Сообщений: 8424
Откуда: Красноярск
Дата: 12.08.11 11:33:08
djeday
Для установки папки, куда распаковывать, если в ее полном пути есть составные названия - кавычки не помогают - лечится путем перехода в нужную папку и из нее вызывать 7z для распаковки (switch -o не нужен).
Аналогично в 1С.
Попробуй закавычить папку назначения вместе с именно с этим ключиком
[cmd /c "] + l7z + [" e ]+ lfile + [ -y "-o] + lfolder+["]

В догонку. Глянь, может мысль придет.
lofso=CREATEOBJECT('Scripting.FileSystemObject')  
  loFolder=lofso.GetFolder("C:\Program Files\7-Zip\")  
  MESSAGEBOX(loFolder.ShortPath)  
  lofile=lofso.GetFile("C:\Program Files\7-Zip\7z.exe")  
  MESSAGEBOX(lofile.ShortPath)



Исправлено: Taran, 12.08.11 11:45
Ratings: 0 negative/0 positive

Re: получение отчета о работе от 7z
wolf3d

Сообщений: 53
Дата: 12.08.11 17:49:29
мдя... грустно(
совсем отвык народ от старых, добрых .bat
проблема решалась за 5 минут)
Ratings: 0 negative/0 positive

Re: получение отчета о работе от 7z
Igor Korolyov

Сообщений: 32605
Дата: 12.08.11 23:11:35
Да она и так решается за 5 минут - но с путями имеющими пробелы конечно же необходимо считаться И в батниках тоже...
Кстати, не проще ли будет прописать путь к 7z в PATH и для его вызова вообще не использовать "полный путь"? Я именно так и делаю для архиваторов (правда я их сами дополнительно копирую в C:\Utils\ - а то не напасёшься длины PATH на всё многообразие утилит которые удобно вызывать "просто по имени")
Впрочем, и для "входного" и для "выходного" путей, если они не могут быть заданы "относительно текущего" - всё одно придётся "кавычить".


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: получение отчета о работе от 7z
Taran

Сообщений: 8424
Откуда: Красноярск
Дата: 12.08.11 23:45:22
Работает без кавычек вообще.
lofso = CREATEOBJECT('Scripting.FileSystemObject')    
  loShell = CREATEOBJECT("Wscript.Shell")  
  loSrcFolder = lofso.GetFolder("C:\Program Files\7-Zip\")  
  lcArcDir	= "c:\___tmp arc dir\"  
  MD (lcArcDir)  
  loArcFolder = loFSO.GetFolder(lcArcDir)  
  lo7Z	= lofso.GetFile("C:\Program Files\7-Zip\7z.exe")  
  lcCMD = lo7Z.ShortPath+" a "+ ADDBS(loArcFolder.ShortPath) +"NewArc.7z "+loSrcFolder.ShortPath  
  MESSAGEBOX(lcCMD)  
    
  lnResult = loShell.Run(lcCMD,0,.T.)       
  MESSAGEBOX(lnResult)  
    
  lcExtrDir = "c:\___tmp extr dir"  
  MD (lcExtrDir)  
  loExtFolder = lofso.GetFolder(lcExtrDir)  
  lcCMD = lo7Z.ShortPath+" x "+ ADDBS(loArcFolder.ShortPath) +"NewArc.7z -o"+loExtFolder.ShortPath  
  MESSAGEBOX(lcCMD)  
    
  lnResult = loShell.Run(lcCMD,0,.T.)       
  MESSAGEBOX(lnResult)
Ratings: 0 negative/0 positive

Re: получение отчета о работе от 7z
djeday
Автор

Сообщений: 7
Дата: 16.08.11 08:43:07
Действительно - работает в FoxPro.
В 1С я ограничился тем что архивы и программу архиватор положил в папку без пробелов - так надежнее :-[
А вообще - всем спасибо кто откликнулся!
Ratings: 0 negative/0 positive

Re: получение отчета о работе от 7z
Taran

Сообщений: 8424
Откуда: Красноярск
Дата: 16.08.11 10:27:21
Ну это если у тебя есть возможность в корне диска создавать файлы и папки. Что бывает не всегда.
По умолчанию и папка временных файлов с пробелами.
Так что как-то так.
Ratings: 0 negative/0 positive



Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 16 Simple777 AndyNigmatec Mitchman Iskander  (Гостей: 12)

26.06.2019 12:57:15 exec: 0.36
Mem: 1.372 Mb

© 2000-2019 Fox Club 
Яндекс.Метрика