Адрес этой странички : http://doc-prg.narod.ru/art_00100/art_00100.htm 
Дата обновления : 12.07.2009
 

(c) Sergey Popov, Usinsk, Komi, 2007

© 12.07.2009 Сергей Попов

1Cv7.
Некоторые полезные алгоритмы.
Файлы-Каталоги.

Статью в виде файла (7 кб) можно скачать здесь: art_00100.zip

 1. Проверить на корректность имя Каталога.
//Возвращает "обработанное" имя каталога

Функция сп_НормализоватьИмяКаталога(ИмяКаталога)
    NameDir = ИмяКаталога;
    NameDir = СокрЛП(NameDir);
    Если СтрДлина(NameDir)<=0 Тогда
        NameDir = "A:\"; //Это если уж совсем ничего не назначено
    КонецЕсли;
    Если Прав(NameDir,1)<>"\" Тогда
        NameDir = NameDir+"\"; 
    КонецЕсли;
    Возврат NameDir;
КонецФункции //сп_НормализоватьИмяКаталога

2. Проверить, это корневой каталог
//Возвращает 1, если каталог (заданный в ИмяКаталога) - КОРНЕВОЙ, 0-в противном случае

Функция сп_ЭтоКорневойКаталог(ИмяКаталога)
    Перем Res; //целое
    Res=0; 
    Sx=СокрЛП(ИмяКаталога);
    Если СтрДлина(Sx)=3 Тогда
        Если Найти(Sx,":\")=2 Тогда
            Res=1;
        КонецЕсли;
    КонецЕсли;
    Возврат Res;
КонецФункции //сп_ЭтоКорневойКаталог

3. Нормализовать КОРОТКОЕ имя файла.
//Заменяет некорректные символы (включая пробелы и "лишние" точки) из имени файла
//Возвращает "обработанное" имя файла 

Функция сп_НормализоватьКороткоеИмяФайла(ИмяФайла)
    Перем I,N,nEndPoint;
    Перем ИмяФайлаВозвр;
    ИмяФайлаВозвр = СокрЛП(ИмяФайла);
    nEndPoint = 0; //положение точки (расширения), если расширение было
    N=СтрДлина(ИмяФайлаВозвр);
    Если N>0 Тогда
        //Найдем позицию последней точки, если она есть 
        I=0;
        Пока I<N Цикл
            I=I+1;
            S1=Сред(ИмяФайлаВозвр,I,1);
            Если S1="." Тогда
                nEndPoint = I;
            КонецЕсли;
        КонецЦикла; 
        //Уберем некорретные символы
        ИмяФайлаВозвр=СтрЗаменить(ИмяФайлаВозвр, "/", "-");
        ИмяФайлаВозвр=СтрЗаменить(ИмяФайлаВозвр, "\", "-");
        ИмяФайлаВозвр=СтрЗаменить(ИмяФайлаВозвр, ":", "-");
        ИмяФайлаВозвр=СтрЗаменить(ИмяФайлаВозвр, ".", "-");
        ИмяФайлаВозвр=СтрЗаменить(ИмяФайлаВозвр, "?", "_");
        ИмяФайлаВозвр=СтрЗаменить(ИмяФайлаВозвр, "*", "_");
        ИмяФайлаВозвр=СтрЗаменить(ИмяФайлаВозвр, "'", "_");
        ИмяФайлаВозвр=СтрЗаменить(ИмяФайлаВозвр, " ", "_");
        Если nEndPoint>0 Тогда
            //Было расширение - вернем точку на место
            Sx="";
            N=СтрДлина(ИмяФайлаВозвр);
            I=0;
            Пока I<N Цикл
                I=I+1;
                Если I<>nEndPoint Тогда
                    Sx=Sx+Сред(ИмяФайлаВозвр,I,1);
                Иначе
                    Sx=Sx+".";
                КонецЕсли;
            КонецЦикла;
            ИмяФайлаВозвр=Sx;
        КонецЕсли;
    КонецЕсли;
    Возврат ИмяФайлаВозвр;
КонецФункции //сп_НормализоватьКороткоеИмяФайла

 

4. Проверить-выбрать каталог(папку)
//Проверяет свободное место на диске(заданном в имени каталога ИмяКаталога)
//Если кол-во свободного места (в байтах) меньше, чем значение MinКолвоБайтНаДиске,
//то выдается диалог для выбора иного каталога.
//Если MinКолвоБайтНаДиске = 0, то проверка на наличие свободного места НЕ производится. 

Функция сп_ПроверитьНазначитьКаталог(MinКолвоБайтНаДиске,ИмяКаталога)
    Перем Res; //целое, возвращаемое значение
    Перем NameDir,ИмяДиска;
    Перем Exit99,Yes;
    Перем MinByte,СвобМесто;
    Res=0;
    СвобМесто = 0;
    MinByte = ЧИСЛО(MinКолвоБайтНаДиске);
    ИмяКаталога=сп_НормализоватьИмяКаталога(ИмяКаталога);
    NameDir=ИмяКаталога;
    Exit99=0;
    Пока Exit99<=0 Цикл
        ИмяДиска=Лев(NameDir,1)+":";
        СвобМесто=ЧИСЛО(ФС.СвободноеМестоНаДиске(ИмяДиска));
        Если СвобМесто<(-1) Тогда
            СвобМесто=СвобМесто*(-1);//Это нейтрализация глюка в 1C для больших дисков
        КонецЕсли;
        Yes=0;
        Если MinByte<>0 Тогда //ограничение на свободное место задано
            Если СвобМесто<MinByte Тогда
                //Места НЕ хватает на диске - выдать диалог для смены Каталога
                Sx="Не хватает места на диске "+ИмяДиска+" (или он отсутствует)!";
                Sx=Sx+" Смените диск или укажите иной каталог на Винче";
                Сообщить(Sx);
                Yes=1;
            КонецЕсли;
        КонецЕсли;
        Если Yes>0 Тогда 
            Если ФС.ВыбратьКаталог(NameDir,"Выберите Каталог")<>1 Тогда
                //Отказ Пользователя от выбора каталога
                Sx="Продолжение НЕвозможно из-за отказа Пользователя указать соотв.каталог";
                Сообщить(Sx);
                Exit99=1;
                Res=0;
            КонецЕсли; 
        Иначе
            //Места на диске хватает - Все ОК или нас это не волнует
            ИмяКаталога=NameDir;
            Exit99=2;
            Res=1;
        КонецЕсли; 
    КонецЦикла;
    Возврат Res;
КонецФункции //сп_ПроверитьНазначитьКаталог

 

5. Получить список файлов заданного каталога по заданной маске
//Список файлов возвращается в переменной типа ТЕКСТ.
//Сама функция возвращает кол-во строк (файлов) в переменной СписФайлов

Функция сп_ПолучитьСписокФайлов(ИмяКаталога,МаскаФайлов,СписФайлов)
    Перем Res,Exit99; //целые
    Перем S1,CurFile,NameDir,Mask; //строки
    Res = 0;//Возвращаемое значение(кол-во файлов)
    NameDir=сп_НормализоватьИмяКаталога(ИмяКаталога); 
    Mask=СокрЛП(МаскаФайлов);
    СписФайлов.Очистить();
    Если СтрДлина(NameDir)>0 Тогда
        Если СтрДлина(Mask)<=0 Тогда
            Mask="*.*"; //если маска файлов НЕ задана, то выбираем ВСЕ
        КонецЕсли;
        CurFile = СокрЛП(ФС.НайтиПервыйФайл(NameDir+Mask));
        Если СтрДлина(CurFile)>0 Тогда
            S1=Лев(CurFile,1);
            Если S1<>"." Тогда //Это НЕ каталог по правилам MS DOS
                СписФайлов.ДобавитьСтроку(CurFile);
            КонецЕсли;
            Exit99=0;
            Пока Exit99<=0 Цикл
                CurFile = СокрЛП(ФС.НайтиСледующийФайл());
                Если СтрДлина(CurFile)>0 Тогда
                    S1=Лев(CurFile,1);
                    Если S1<>"." Тогда //Это НЕ каталог по правилам MS DOS
                        СписФайлов.ДобавитьСтроку(CurFile);
                    КонецЕсли;
                Иначе
                    Exit99=1; //Все файлы выбраны - выход из цикла
                КонецЕсли; 
            КонецЦикла;
        КонецЕсли;
    КонецЕсли;
    Res=СписФайлов.КоличествоСтрок();//Кол-во найденных файлов
    Возврат Res;
КонецФункции //сп_ПолучитьСписокФайлов

 

 

© 12.07.2009 Сергей Попов

 


Hosted by uCoz
-->