Имя: Пароль:
1C
1С v8
Получить имя временного файла - как же оно работает?
0 Гипервизор
 
08.04.15
23:45
Помогите разобраться вот с такими взаимоисключающими параграфами
(тут я вынужден выборочно процитировать СП):
ПолучитьИмяВременногоФайла(<Расширение>)
Параметры: <Расширение>
Если параметр не задан, то СОЗДАЕТСЯ временный файл с расширением по умолчанию.
Описание:
При выполнении метода файл НЕ СОЗДАЕТСЯ.
Удаление временных файлов НЕ ОБЯЗАТЕЛЬНО.
Если этот файл, по каким либо причинам, НЕ БЫЛ УДАЛЕН, программа УДАЛИТ его при следующем запуске.
Примечание:
РЕКОМЕНДУЕТСЯ УДАЛЯТЬ временный файл самостоятельно после его использования.
Уместен ли тут мем с Джеки Чаном?
1 PR
 
08.04.15
23:47
(0) А что ТУТ не ТАК?
2 User_Agronom
 
08.04.15
23:48
(0) Если параметр не задан, то СОЗДАЕТСЯ временный файл с расширением по умолчанию

Имя временного файла.
3 H A D G E H O G s
 
08.04.15
23:55
(0) Файл не создается, создается имя.
Удалять не обязательно, 1С удалит его само.
Ну либо винда при перезагрузке.
4 User_Agronom
 
09.04.15
00:32
(1) ...вынужден выборочно процитировать СП...

На форуме где СП продают это не этично.
5 ДенисЧ
 
09.04.15
07:13
(3) и 1с не удалит, и винда тоже...
6 User_Agronom
 
09.04.15
07:20
(5) Удалит админ при чистке временных файлов.
7 ДенисЧ
 
09.04.15
07:31
(6) админ != 1с && админ != винда )))
8 Провинциальный 1сник
 
09.04.15
07:34
Вообще конечно получать имя временного файла без одновременного создания - некомильфо. Ибо в промежутке между получением имени и открытием файла на запись кто-то другой может занять это же имя. И будет ошибка. Вероятность маленькая, но она есть.
Почему 1с не позволяет создать временный файл с открытием при указании расширения - тайна великая в том. Я бы еще отметил в недостатках отсутствие возможности указать путь для файла..
9 ДенисЧ
 
09.04.15
07:38
(8) Путь к временному файлу указывается в свойствах системы. На то он и временный
10 Провинциальный 1сник
 
09.04.15
07:40
(9) В свойствах системы указывается путь к каталогу временных файлов. Приложениям ничто не запрещает использовать свои каталоги, однако..
11 dmpl
 
09.04.15
07:55
(8) Скорее всего это просто обертка к https://msdn.microsoft.com/en-us/library/windows/desktop/aa364991(v=vs.85).aspx
12 User_Agronom
 
09.04.15
08:03
(8) 1С берет путь временного каталога пользователя. Даже если 100500 пользователей работают в терминале, то у каждого этот каталог свой.
13 dmpl
 
09.04.15
08:13
+(11) Хотя эксперимент показал, что, видимо, 1С изобрела свой велосипед. В этом смысле становится понятной фраза "При выполнении метода файл НЕ СОЗДАЕТСЯ", т.к. штатным методом Windows файл именно создается и закрывается (что гарантирует незанятость имени файла). В случае с 1С они полагаются на однопоточность исполнения кода: у каждого экземпляра программы свой диапазон имен временных файлов (не пересекающийся с диапазонами имен файлов других процессов).

(12) Тут речь про то, что если пользователь одновременно запустит 10 экземпляров программы...
14 MM
 
09.04.15
08:24
Временные файлы 1С содержат в себе PID процесса, их создавшего, который уникален в каждый момент времени на компьютере, диапазон из (13) определяется именно так.
(12) Каталог может быть свой у каждой сессии или общий зависит от настройки терминала (в ОС).
(5) 1С корректном закрытии удаляет временные файлы со своим PID. При запуске клиент проверяет все временные файлы (там используются файлы блокировок, если они заняты значит процесс с их PID выполняется), если они не принадлежат работающим экземплярам 1С, то они удаляются. Это, конечно, если именование временных файлов производится ПолучитьИмяВременногоФайла.
15 Провинциальный 1сник
 
09.04.15
08:37
(14) "Временные файлы 1С содержат в себе PID процесса, их создавшего, который уникален в каждый момент времени на компьютере"
Тем не менее, вероятность того, что совершенно другая программа случайно сгенерит такое же имя файла, отлична от нуля)
16 MM
 
09.04.15
08:43
(15) только преднамеренно.
17 Провинциальный 1сник
 
09.04.15
08:45
(16) Вероятность падения метеорита на Челябинск была крайне небольшой, очевидно он туда преднамеренно упал)
18 dmpl
 
09.04.15
08:48
(15) Ну... GUID'ы тоже, теоретически, могут совпасть...
19 MM
 
09.04.15
08:51
(17) какая другая программа? 1С так не сделает, а зачем посторонней программе начинать имя временного файла с "v8_". А общий шаблон выглядит так:
v8_(PID)_(порядковый номер).(tmp или указанное расширение)
20 ДенисЧ
 
09.04.15
09:03
(11) Не скорее всего, а именно так и есть
21 Гёдза
 
09.04.15
09:31
(19) А другой экземпляр 1С?
22 MM
 
09.04.15
10:06
(21) У каждого экземпляра свой уникальный PID, он может быть выдан повторно, но только после завершения процесса. Когда процесс начинает работу он удаляет старые данные, если этот PID уже использовался другим 1С, за ним всё приберут.
23 Torquader
 
09.04.15
11:06
(22) Это всё так, только некоторые "умники" могут каталог временных файлов с клиента на сервере проецировать - и вот тогда начинается "кто первый - того и тапки".
24 Serg_1960
 
09.04.15
11:29
"Если параметр не задан, то СОЗДАЕТСЯ временный файл с расширением по умолчанию." - читать как "Если параметр не задан, то используется расширение "по умолчанию" для временных файлов."
25 tridog
 
09.04.15
11:31
(3) На сервере очень даже надо.
Потому что "следующий запуск программы" на сервере может быть очень не скоро)

В типовых почти везде удаляют после использования (в серверном коде).
26 Serg_1960
 
09.04.15
11:47
Имхо, корректнее было писать более абстрактно. Типа:

"Временный файл удаляется ОС после использования, а также при последующем запуске программы. Программно удалять файл после использования не обязательно, но рекомендуется."
27 MM
 
09.04.15
12:13
(25) при корректном закрытии программы временные файлы тоже удаляются. А вот серверный процесс может жить долго и "добра" у него, соответственно, много скопится.
(26) не ОС, а 1С
28 Torquader
 
09.04.15
12:38
В стандартной функции Windows для временных файлов ставился специальный атрибут, что файл временный, и он должен быть быть удалён при следующей загрузке системы, но, во-первых, не всегда удаляет, во-вторых, для сервера, например, следующий запуск будет ой как не скоро.
Конечно, можно ставить DELETE_ON_CLOSE, но для многих случаев, когда в файл пишут что-то для передачи между процессами, такой способ не подходит.
Слава богу, что в Windows-системе Pid-ы могут повторно использоваться, не дожидаясь переполнения счётчика.
Но, всё же, не лишним будет удалять временный файл за собой сразу после того, как он оказался не нужен, и не ждать, пока кто-то "вынесет мусор".
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn