Длинные полные пути в именах файлов

Если возникнет проблема при работе с файлами, длина полного имени которых превышает 250 символов (примерная величина по различным источникам), Вы можете использовать приведенный ниже прием. Он заключается в прибавлении перед полным путем символов "\\?\".

Для OneScript начиная с версии 1.8.0 был сделан переход на .NET Framework 4.8 в котором длинные имена обрабатываются правильно. Но всё таки иногда необходимо подкорректировать длинный путь вот таким способом.

Привожу пример работы с длинными именами.

Пример

// Разместите в подкаталогах текстовые файлы и Вы сможете прочитать их сожержимое. 
// Подкаталогами с длинными именами можно управлять без проблем (создавать/удалять) например
// файловым менеджером Unreal Commander. В примере подразумевается дерево каталогов согласно
// переменным Стр1, Стр2, Стр3, Стр4, Стр5, Стр6.

Процедура Содержимое(ДлинныйПуть)
  Сообщить("ДлинныйПуть = " + ДлинныйПуть);
  Файлы = НайтиФайлы(ДлинныйПуть, "*", Ложь);
  Для А = 0 По Файлы.ВГраница() Цикл
    ТекущийФайл = Файлы[А];
    Если ТекущийФайл.ЭтоКаталог() Тогда
      Содержимое(ТекущийФайл.ПолноеИмя);
    Иначе
      ТекстДок = Новый ТекстовыйДокумент;
      ТекстДок.Прочитать(ТекущийФайл.ПолноеИмя);
      Текст = ТекстДок.ПолучитьТекст();
      Сообщить("Текст = " + Текст);
    КонецЕсли
  КонецЦикла;
КонецПроцедуры
Стр1 = "C:\000\ОченьДлинныйОченьДлинныйОченьДлинныйПутьОченьДлинныйОченьДлинныйОченьДлинныйПуть\";
Стр2 = "ОченьДлинныйОченьДлинныйОченьДлинныйПутьОченьДлинныйОченьДлинныйОченьДлинныйПуть\";
Стр3 = "ОченьДлинныйОченьДлинныйОченьДлинныйПутьОченьДлинныйОченьДлинныйОченьДлинныйПуть\";
Стр4 = "ОченьДлинныйОченьДлинныйОченьДлинныйПутьОченьДлинныйОченьДлинныйОченьДлинныйПуть\";
Стр5 = "ОченьДлинныйОченьДлинныйОченьДлинныйПутьОченьДлинныйОченьДлинныйОченьДлинныйПуть\";
Стр6 = "ОченьДлинныйОченьДлинныйОченьДлинныйПутьОченьДлинныйОченьДлинныйОченьДлинныйПуть\";
Сообщить("" + СтрДлина(Стр1 + Стр2 + Стр3 + Стр4 + Стр5 + Стр6));
Файлы = НайтиФайлы(Стр1, "*", Ложь);
Для А = 0 По Файлы.ВГраница() Цикл
  ТекущийФайл = Файлы[А];
  Если ТекущийФайл.ЭтоКаталог() Тогда
    Содержимое("\\?\" + ТекущийФайл.ПолноеИмя);
  Иначе
    ТекстДок = Новый ТекстовыйДокумент;
    ТекстДок.Прочитать("\\?\" + ТекущийФайл.ПолноеИмя);
    Текст = ТекстДок.ПолучитьТекст();
    Сообщить("Текст = " + Текст);
  КонецЕсли
КонецЦикла;

Смотрите также

Библиотека OneScriptForms