Имя: Пароль:
1C
 
Как узнать существование заданого каталога в 1С?
0 Scorpion2123
 
18.01.10
15:32
Привет всем! Как можно проверить существование заданого каталога в 1С?
1 butterbean
 
18.01.10
15:33
пример из СП:
Функция ПроверитьСуществованиеКаталога(ИмяКаталога) Экспорт
   КаталогНаДиске = Новый Файл(ИмяКаталога);
   Если КаталогНаДиске.Существует() Тогда
       Возврат Истина;
   Иначе
       Ответ = Вопрос("Каталог не существует. Создать?",
                       РежимДиалогаВопрос.ОКОтмена);
       Если Ответ = КодВозвратаДиалога.ОК Тогда
           СоздатьКаталог(ИмяКаталога);
           Возврат Истина;
       Иначе
           Возврат Ложь;
       КонецЕсли;
   КонецЕсли;
КонецФункции
2 Scorpion2123
 
18.01.10
15:34
Спасибо большое!
3 dk
 
18.01.10
15:42
да, для 7-ки актуально )))
4 Scorpion2123
 
18.01.10
15:45
(3) я вижу что то-то нето)))), а как для 7-ки переделать?
5 KRV
 
18.01.10
15:46
(4) нужно взять и переделать... может попробовать почитать ЖКК?   совсем уже обленились...
6 AeDen
 
18.01.10
15:47
СуществуетФайл(<?>)
Синтаксис:
СуществуетФайл(<ИмяФайла>)
Назначение:
Проверяет существование файла..
Возвращает: 1 - файл существует; 0 - не существует.
Параметры:
<ИмяФайла> - Строковое выражение с именем файла.
Подробнее см. в документации, глава 'Работа с Файлами'
7 dk
 
18.01.10
15:47
там хитрее
сходи в поиск
по памяти
1. попробовать установить текущийкаталог и сравнить теккаталог ДО и ПОСЛЕ
2. ФС.СуществуетФАйл(Мойкаталог+"\.") или как-то так - точно не помню
8 DenLaDen
 
18.01.10
15:47
Если ФС.СуществуетФайл( Каталог ) = 0 Тогда
                   ФС.СоздатьКаталог( Каталог );
               КонецЕсли;
9 ДенисЧ
 
18.01.10
15:47
(7) 2. Именно так....
10 AeDen
 
18.01.10
15:47
АтрибутыФайла(<?>,,,,,,);
Синтаксис:
АтрибутыФайла(<ИмяФайла>,<РазмерФайла>,<АтрибутыФайла>,<ВремяСоздания>,<ВремяПоследнегоДоступа>,<ВремяПоследнейЗаписи>,<РасширенноеИмяФайла>)
Назначение:
Возвращает атрибуты файла (в параметрах).
Параметры:
<ИмяФайла> - строка с именем файла;
<РазмерФайла> - переменная, принимающая размер файла в байтах;
<АтрибутыФайла> - переменная, принимающая атрибуты файла;
Возвращаемое строковое значение длиной 9 символов, в котором закодированы атрибуты файла. Символы могут принимать значения ''0'' или ''1'':
первый символ: если ''1'' - файл только для чтения;
второй символ: если ''1'' - скрытый файл;
третий символ: если ''1'' - системный файл;
четвертый символ: если ''1'' - каталог;
пятый символ: если ''1'' - архивный файл;
шестой символ: если ''1'' - обычный файл (все другие атрибуты не установлены);
седьмой символ: если ''1'' - временный файл;
восьмой символ: если ''1'' - файл, сжатый каким-либо архиватором;
девятый символ: если ''1'' - нет доступа к файлу.
<ВремяСоздания> - переменная, принимающая строку с датой и временем создания файла;
<ВремяПоследнегоДоступа> - переменная, принимающая строку с датой и временем последнего доступа к файлу;
<ВремяПоследнейЗаписи> - переменная, принимающая строку с датой и временем последней записи файла;
<РасширенноеИмяФайла> - переменная, принимающая строку с полным именем файла.

Подробнее см. в книгу ''1С:Предприятие 7.7. Описание встроенного языка. Часть 2'', глава 37 ''Работа с Файлами''.
11 Sadovnikov
 
18.01.10
15:48
СуществуетДиректория(<?>,);
Синтаксис:
СуществуетДиректория(<Путь>,<ПризнакСоздания>)
Назначение:
Проверить наличие заданного каталога и, при необходимости, его создать.
Возвращает: 0 - в случае отсутствия каталога, 1 - заданный путь есть на диске, 2 - каталог отсутствовал и был успешно создан, (-1) - произошла ошибка при выполнении команды.

Параметры:
<Путь> - строка, имя проверяемого пути.
<ПризнакСоздания> - число, необязательный параметр, 1 - создавать каталог в случае его остутствия, 0 - не создавать. Значение по умолчанию - 0.
12 also
 
18.01.10
15:49
СуществуетФайл(Каталог+"\NUL");
13 also
 
18.01.10
15:49
(11) Это ты где нарыл?
14 AeDen
 
18.01.10
15:49
(11) откуда метод?
15 Scorpion2123
 
18.01.10
15:50
всем спасибо, понял, буду пробовать!
16 Sadovnikov
 
18.01.10
15:51
(13), (14) Как обычно, RiK_SQL :)
17 also
 
18.01.10
15:52
(16) Не сомневался...А потом даже вспомнил что он есть. Работает он как (12) :)?
18 ДенисЧ
 
18.01.10
15:52
(13) Разумеется, в RiQ^HK...
19 AeDen
 
18.01.10
15:52
(16)Ага, ну да, обязательно надо вынести во внешнюю компоненту то, что можно и штатно сделать:)
20 also
 
18.01.10
15:53
(16) Не ну (18) опять RIQ...Пора его наказывать :)))
21 Sadovnikov
 
18.01.10
15:54
(17) Вот так он работает:
       Temp:=GetNParam(paParams,0);
       try
         if DirectoryExists(Temp) then
           //есть такая директория
           pvarRetValue:=1
         else
           if GetNParam(paParams,1)=0 then
             //не надо создавать директорию
             pvarRetValue:=0
           else
             //надо создать директорию
             if CreateDir(Temp) then
               //создали директорию
               pvarRetValue:=2
             else
               pvarRetValue:=0;
       except
         pvarRetValue:=-1;
       end;
Отличие от 1С-кого - можно сетевые пути указывать.
(18) Р-р-р-р!! :)
22 Sadovnikov
 
18.01.10
15:55
(19) Попробуй, сделай.
23 also
 
18.01.10
15:56
+(22) особенно "каталог отсутствовал и был успешно создан" :)
24 AeDen
 
18.01.10
15:59
"Проверить наличие заданного каталога и, при необходимости, его создать.
Возвращает: 0 - в случае отсутствия каталога, 1 - заданный путь есть на диске, 2 - каталог отсутствовал и был успешно создан, (-1) - произошла ошибка при выполнении команды. "

Не сделать при помощи методов 1С? Да не смешите мои валенки. Можно еще проверить, каталог или файл существует с таким именем, и какие атрибуты у файла стоят.
25 Sadovnikov
 
18.01.10
16:00
(24) А теперь по сети это сделай...
26 AeDen
 
18.01.10
16:04
(25) Хм... Не проверял кстати... Не получится?

Мне щас гораздо интереснее это:
Хранилище.УстановитьТекущийКаталог(ИмяТекущегоКаталога);
   
   Если флВложения=1 Тогда
       СписокКаталогов=Хранилище.ПолучитьСписокКаталогов();
       Для С=1 По СписокКаталогов.РазмерСписка() Цикл
           ИмяПодКаталога="";
           КороткоеИмя=СписокКаталогов.ПолучитьЗначение(С,ИмяПодКаталога);
           Если КороткоеИмя=".." Тогда
               Продолжить;
           КонецЕсли;
           Ошибок=Ошибок+ВыполнитьТестыВКаталоге(ИмяПодКаталога);
       КонецЦикла;
   КонецЕсли;
   
   //В подкаталогах поменяли имя тек. каталога
   Хранилище.УстановитьТекущийКаталог(ИмяТекущегоКаталога);
   
   ТекТест=СоздатьОбъект("TheTest");
   
   _Тестов=_Тестов+Хранилище.КоличествоТестов();
   Для Т=1 По Хранилище.КоличествоТестов() Цикл
       лНомерТеста = _Тестов - Хранилище.КоличествоТестов() + Т;
       Состояние(""+ лНомерТеста +"/" + _Тестов + ". " + Хранилище.ПолучитьТекущийКаталог() + "/" + Т);
       ТекТест.Инит(Хранилище.ПолучитьТекущийКаталог(),Т);

       РезультатТеста=ТекТест.Тестировать(_ТаблицаПечатнойФормы);
       Если РезультатТеста<>"" Тогда
           _Текст=ДобавитьТекст(_Текст,РезультатТеста);
           Ошибок=Ошибок+1;
       КонецЕсли;
   КонецЦикла;
   
   Возврат Ошибок;

:)
27 vde69
 
18.01.10
16:08
до кучи определения отсутсвия доступа

// взвращает -1 - нет доступа, 1 - каталог, 0 - файл
Функция ЭтоКаталог(Каталог, ИмяФайла)  

   перем раз, атр;                        

   Если (ИмяФайла = ".") или (ИмяФайла = "..") Тогда
       Возврат -3;
   КонецЕсли;
   
   ФС.АтрибутыФайла(Каталог + ИмяФайла, раз, атр);
   
   Если (Сред(атр,9,1) = "1") и (Сред(атр,4,1) = "1")  Тогда
       Возврат -1;
   ИначеЕсли (Сред(атр,4,1) = "1")  Тогда
       Возврат 1;
   ИначеЕсли (СокрЛП(атр) = "0")  Тогда
       Возврат -2;
   Иначе
       Возврат 0;
   КонецЕсли;
   
КонецФункции
28 Барбариска
 
18.01.10
16:23
Странно, почему штатное от 1С у меня в сети работает ..))
Примерно так:

ИмяФ = СокрЛП(ИмяФайла);
ИмяФ = ?(Прав(ИмяФ, 1) = "\", ИмяФ, ИмяФ + "\");
Флаг = ФС.СуществуетФайл(ИмяФ+"*.*");
Сообщить("Существует каталог: "+Флаг);
29 Барбариска
 
18.01.10
16:24
Если уж совсем нет доверия к штатным от 1С методам -
то наверное можно FSO использовать - по крайней мере это "почти штатно".
30 AeDen
 
18.01.10
16:25
(25) О! Видел (28)? Лапшу мне тут на уши вешают...
31 Барбариска
 
18.01.10
16:28
(30) возможно, сети, как и йогурты - не все одинаково полезны... допускаю, что в какой-то сети что-то работает неустойчиво ))) Но FSO вроде штука надежная и уважаемая ))
32 smaharbA
 
18.01.10
16:31
(25) на поллитру ?
33 Sadovnikov
 
19.01.10
09:06
(30), (32) Я щас уже не вспомню, какой релиз 1С-ки был. Столкнулся с проблемой. И было гораздо проще дописать несколько строк к ВК, чем "штатными" методами изголяться :)
34 vde69
 
19.01.10
09:18
действительно 1с с сетевыми путями работает далеко не всегда, проблемма здесь в использовании старых библиотек, по этому оди и то-же код может по разному работать на разных компах.

для примера попробуйте через скрытую шару "$" поработать штатными процедурами, или через IP.

Тем не менее все можно настроить и будет работать :)