![]() |
![]() |
![]() |
|
Как узнать существование заданого каталога в 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. Тем не менее все можно настроить и будет работать :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |