Skip to content

Commit d963dc6

Browse files
committed
Merge branch 'release/1.1.0'
2 parents f2d8ee9 + 73d0530 commit d963dc6

File tree

3 files changed

+69
-10
lines changed

3 files changed

+69
-10
lines changed

packagedef

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
Описание.Имя("fs")
3-
.Версия("1.0.0")
3+
.Версия("1.1.0")
44
.ВключитьФайл("Модули")
55
.ВключитьФайл("LICENSE")
66
.ВключитьФайл("README.md");

tests/Пути.os

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
#Использовать ".."
2+
13
#Использовать asserts
24
#Использовать tempfiles
35

4-
#Использовать ".."
5-
6-
Перем мМенеджерВременныхФайлов;
6+
Перем мМенеджерВременныхФайлов; // менеджер для управления временными файлами
77

88
Функция ПолучитьСписокТестов(Знач ЮнитТестирование) Экспорт
99

@@ -16,6 +16,8 @@
1616
МассивТестов.Добавить("Тест_ОтносительныйПуть_РазныеРегистры");
1717

1818
МассивТестов.Добавить("Тест_ПолныйПуть");
19+
20+
МассивТестов.Добавить("Тест_ОбъединитьПутиПравильно");
1921

2022
Возврат МассивТестов;
2123

@@ -87,3 +89,13 @@
8789
ПолныйПуть = ФС.ПолныйПуть(Путь);
8890
Ожидаем.Что(ПолныйПуть).Равно("C:\projects\SB\vanessa\apache");
8991
КонецПроцедуры
92+
93+
Процедура Тест_ОбъединитьПутиПравильно() Экспорт
94+
95+
ПолныйПуть = ФС.ОбъединитьПути("E:\my\test", "\images", "upload/pic.png");
96+
97+
ПолныйПуть = СтрЗаменить(ПолныйПуть, ПолучитьРазделительПути(), "\");
98+
99+
Ожидаем.Что(ПолныйПуть).Равно("E:\my\test\images\upload\pic.png");
100+
101+
КонецПроцедуры

Модули/ФС.os

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
//
77
/////////////////////////////////////////////////////////////////////
88

9-
109
// Проверяет существование файла или каталога
1110
//
1211
// Параметры:
@@ -35,7 +34,7 @@
3534

3635
Объект = Новый Файл(Путь);
3736

38-
Возврат Объект.Существует() и Объект.ЭтоФайл();
37+
Возврат Объект.Существует() И Объект.ЭтоФайл();
3938

4039
КонецФункции // ФайлСуществует()
4140

@@ -51,7 +50,7 @@
5150

5251
Объект = Новый Файл(Путь);
5352

54-
Возврат Объект.Существует() и Объект.ЭтоКаталог();
53+
Возврат Объект.Существует() И Объект.ЭтоКаталог();
5554

5655
КонецФункции // КаталогСуществует()
5756

@@ -138,7 +137,8 @@
138137
// Возвращаемое значение:
139138
// <Строка> - относительный путь файла
140139
//
141-
Функция ОтносительныйПуть(Знач ПутьКорневогоКаталога, Знач ПутьВнутреннегоФайла, Знач РазделительПути = Неопределено) Экспорт
140+
Функция ОтносительныйПуть(Знач ПутьКорневогоКаталога, Знач ПутьВнутреннегоФайла,
141+
Знач РазделительПути = Неопределено) Экспорт
142142

143143
Если ПустаяСтрока(ПутьКорневогоКаталога) Тогда
144144
ВызватьИсключение "Не указан корневой путь в методе ФС.ОтносительныйПуть";
@@ -155,7 +155,7 @@
155155
Рез = Сред(Рез, 2);
156156
КонецЕсли;
157157
Если Найти("\/", Прав(Рез, 1)) > 0 Тогда
158-
Рез = Лев(Рез, СтрДлина(Рез)-1);
158+
Рез = Лев(Рез, СтрДлина(Рез) - 1);
159159
КонецЕсли;
160160
Если РазделительПути <> Неопределено Тогда
161161
Рез = СтрЗаменить(Рез, "\", РазделительПути);
@@ -182,7 +182,6 @@
182182
Возврат Файл.ПолноеИмя;
183183
КонецФункции // ПолныйПуть(Знач ОтносительныйИлиПолныйПуть) Экспорт
184184

185-
186185
// Подготовить шаблон к использованию в регулярке путем экранирования служебных символов
187186
//
188187
// Параметры:
@@ -218,3 +217,51 @@
218217
Возврат Шаблон;
219218

220219
КонецФункции
220+
221+
// Дополнение к методу ОбъединитьПути
222+
// - разделители пути приводятся к единому разделителю, которые актуален для текущей системы
223+
// - если в одном из путей встречается корневой слеш, то исключается получения корневого пути от диска,
224+
// чем страдает метод движка ОбъединитьПути
225+
// ОбъединитьПути("E:\my\test", "\images", "upload\pic.png") выведет неожиданное \images\upload\pic.png
226+
// а ОбъединитьПутиПравильно выведет ожидаемое E:\my\test\images\upload\pic.png
227+
//
228+
// Параметры:
229+
// Путь1 - Строка - часть пути.
230+
// Путь2 - Строка - часть пути.
231+
// Путь3 - Строка - часть пути. Необязательно.
232+
// Путь4 - Строка - часть пути. Необязательно.
233+
//
234+
// Возвращаемое значение:
235+
// Строка - финальный путь с разделителями, которые актуальны для текущей системы
236+
//
237+
Функция ОбъединитьПути(Знач Путь1, Знач Путь2, Знач Путь3 = "", Знач Путь4 = "") Экспорт
238+
239+
ВсеПути = Новый Массив;
240+
ВсеПути.Добавить(Путь1);
241+
ВсеПути.Добавить(Путь2);
242+
243+
Если Не ПустаяСтрока(Путь3) Тогда
244+
ВсеПути.Добавить(Путь3);
245+
КонецЕсли;
246+
247+
Если Не ПустаяСтрока(Путь4) Тогда
248+
ВсеПути.Добавить(Путь4);
249+
КонецЕсли;
250+
251+
Компоненты = Новый Массив;
252+
Для каждого Путь Из ВсеПути Цикл
253+
254+
// К единому виду разделителей.
255+
ВремПуть = СтрЗаменить(Путь, "\", "/");
256+
ВремКомпоненты = СтрРазделить(ВремПуть, "/", Ложь);
257+
Для каждого Компонент Из ВремКомпоненты Цикл
258+
Компоненты.Добавить(Компонент);
259+
КонецЦикла;
260+
261+
КонецЦикла;
262+
263+
РезультирующийПуть = СтрСоединить(Компоненты, ПолучитьРазделительПути());
264+
265+
Возврат РезультирующийПуть;
266+
267+
КонецФункции

0 commit comments

Comments
 (0)