Разложить полное имя файла. Раскладывает полное имя файла на составляющие.
// Раскладывает полное имя файла на составляющие.
//
// Параметры:
// ПолноеИмяФайла - Строка - полный путь к файлу.
// ЭтоПапка - Булево - признак того, что требуется разложить полное имя папки, а не файла.
//
// Возвращаемое значение:
// Структура - имя файла, разложенное на составные части(аналогично свойствам объекта Файл):
// ПолноеИмя - содержит полный путь к файлу, т.е. полностью соответствует входному параметру ПолноеИмяФайла.
// Путь - содержит путь к каталогу, в котором лежит файл.
// Имя - содержит имя файла с расширением, без пути к файлу.
// Расширение - содержит расширение файла.
// ИмяБезРасширения - содержит имя файла без расширения и без пути к файлу.
// Пример: если ПолноеИмяФайла = "c:\temp\test.txt", то структура заполнится следующим образом:
// ПолноеИмя: "c:\temp\test.txt".
// Путь: "c:\temp\"
// Имя: "test.txt"
// Расширение: ".txt"
// ИмяБезРасширения: "test".
//
Функция РазложитьПолноеИмяФайла(Знач ПолноеИмяФайла, ЭтоПапка = Ложь) Экспорт
СтруктураИмениФайла = Новый Структура("ПолноеИмя,Путь,Имя,Расширение,ИмяБезРасширения");
// Убираем из полного имени файла завершающий слеш и сохраняем получившееся полное имя в структуре.
Если ЭтоПапка И (Прав(ПолноеИмяФайла, 1) = "/" Или Прав(ПолноеИмяФайла, 1) = "\") Тогда
Если ЭтоПапка Тогда
ПолноеИмяФайла = Сред(ПолноеИмяФайла, 1, СтрДлина(ПолноеИмяФайла) - 1);
Иначе
// Если путь к файлу заканчивается слешем, то у файла нет имени.
СтруктураИмениФайла.Вставить("ПолноеИмя", ПолноеИмяФайла);
СтруктураИмениФайла.Вставить("Путь", ПолноеИмяФайла);
СтруктураИмениФайла.Вставить("Имя", "");
СтруктураИмениФайла.Вставить("Расширение", "");
СтруктураИмениФайла.Вставить("ИмяБезРасширения", "");
Возврат СтруктураИмениФайла;
КонецЕсли;
КонецЕсли;
СтруктураИмениФайла.Вставить("ПолноеИмя", ПолноеИмяФайла);
// Если полное имя файла оказалось пустым, то остальные параметры структуры возвращаем пустыми.
Если СтрДлина(ПолноеИмяФайла) = 0 Тогда
СтруктураИмениФайла.Вставить("Путь", "");
СтруктураИмениФайла.Вставить("Имя", "");
СтруктураИмениФайла.Вставить("Расширение", "");
СтруктураИмениФайла.Вставить("ИмяБезРасширения", "");
Возврат СтруктураИмениФайла;
КонецЕсли;
// Выделяем путь к файлу и имя файла.
Если СтрНайти(ПолноеИмяФайла, "/") > 0 Тогда
ПозицияРазделителя = СтрНайти(ПолноеИмяФайла, "/", НаправлениеПоиска.СКонца);
ИначеЕсли СтрНайти(ПолноеИмяФайла, "\") > 0 Тогда
ПозицияРазделителя = СтрНайти(ПолноеИмяФайла, "\", НаправлениеПоиска.СКонца);
Иначе
ПозицияРазделителя = 0;
КонецЕсли;
СтруктураИмениФайла.Вставить("Путь", Лев(ПолноеИмяФайла, ПозицияРазделителя));
СтруктураИмениФайла.Вставить("Имя", Сред(ПолноеИмяФайла, ПозицияРазделителя + 1));
// Папки не имеют расширений, а для файла выделяем расширение.
Если ЭтоПапка Тогда
СтруктураИмениФайла.Вставить("Расширение", "");
СтруктураИмениФайла.Вставить("ИмяБезРасширения", СтруктураИмениФайла.Имя);
Иначе
ПозицияТочки = СтрНайти(СтруктураИмениФайла.Имя, ".", НаправлениеПоиска.СКонца);
Если ПозицияТочки = 0 Тогда
СтруктураИмениФайла.Вставить("Расширение", "");
СтруктураИмениФайла.Вставить("ИмяБезРасширения", СтруктураИмениФайла.Имя);
Иначе
СтруктураИмениФайла.Вставить("Расширение", Сред(СтруктураИмениФайла.Имя, ПозицияТочки));
СтруктураИмениФайла.Вставить("ИмяБезРасширения", Лев(СтруктураИмениФайла.Имя, ПозицияТочки - 1));
КонецЕсли;
КонецЕсли;
Возврат СтруктураИмениФайла;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ПолучитьФайлИзХранилищаМенеджераСервиса (БСП)
ПолучитьПолноеИмяФайлаИзРегистра (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)