ЧтениеZIP не любит кавычки

Столкнулся с проблемой — код по обработке выписок у клиента перестал работать, спотыкался на одном файле.

Разбирательства показали, что метод Распаковать у ЧтениеZIP формирует файлы, где кавычки заменены символом подчеркивания:

Выписка_ООО "ВИВА"_40------------93_27.04.2025-27.04.2025.pdf
Выписка_ООО _ВИВА__40------------93_27.04.2025-27.04.2025.pdf

Эта особенность не документирована. К тому же ЧтениеZIP не позволяет получать конечные имена распакованных файлов. Возможно и другие символы заменяются-экранируются! Кто так пишет!?

Вот функция распаковки на текущий момент:

Процедура РаспаковатьZIPФайлы(Каталог)
	Файлы = НайтиФайлы(Каталог, "*.zip");    
	Для Каждого Файл ИЗ Файлы Цикл
		Попытка
			ЧтениеZIP = Новый ЧтениеZipФайла(Файл.ПолноеИмя);
		Исключение        
			Сообщить("Не удалось распаковать файлы архива: """ + Файл["ИмяФайла"] + """", СтатусСообщения.Важное);
			Продолжить;
		КонецПопытки;
	
		Для Каждого Элемент Из ЧтениеZIP.Элементы Цикл
			ЧтениеZIP.Извлечь(Элемент, Каталог, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);                                                                                 
			//Даем уникальное имя
			ИсхИмя = Каталог + "\" + УбратьНедопустимыеСимволыРаспаковки(Элемент.ИсходноеИмя);
			РезИмя = Каталог + "\" + УбратьНедопустимыеСимволыРаспаковки(Элемент.ИсходноеИмяБезРасширения) + "_" +  Строка(Новый УникальныйИдентификатор()) +  "." + Элемент.Расширение;
			РаспакованныйФайл = Новый Файл(ИсхИмя); 
			РаспакованныйФайл.УстановитьТолькоЧтение(Ложь); //Сбрасываем атрибут только чтение
			ПереместитьФайл(ИсхИмя, РезИмя); 
			Сообщить("Перемещение распакованного: " + ИсхИмя + " -> " + РезИмя);
		КонецЦикла;
		ЧтениеZIP.Закрыть();
		УдалитьФайлы(Файл.ПолноеИмя); //Удаляем сам скачанный файл архива
	КонецЦикла;

КонецПроцедуры

Функция УбратьНедопустимыеСимволыРаспаковки(Знач С)
	С = СтрЗаменить(С, """", "_");
	Возврат С;
КонецФункции

Объем: 0.5 час

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 2

  1. rzd:

    Кто так читает документацию?

    В именах файлов и папок в архиве запрещено использование символов: > < | ? * / \ : ". Такие символы будут заменены на символ подчеркивания "_".
    При этом свойства ИсходноеИмя, ИсходноеПолноеИмя, ИсходноеИмяБезРасширения, ИсходноеРасширение, ИсходныйПуть будут содержать немодифицированные значения.
    Если в архиве имена файлов дублируются, платформа устранит дублирование при работе с файлами, обеспечив уникальность имен файлов в архиве.

    • это в синтакс-помощнике или где? и как получить финальное имя файла с помощью функции 1С, не вычисляя самому?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *