Получить имя временного файла - как же оно работает? #739447


#0 by Гипервизор
Помогите разобраться вот с такими взаимоисключающими параграфами (тут я вынужден выборочно процитировать СП): Параметры: <Расширение> Если параметр не задан, то СОЗДАЕТСЯ временный файл с расширением по умолчанию. Описание: При выполнении метода файл НЕ СОЗДАЕТСЯ. Удаление временных файлов НЕ ОБЯЗАТЕЛЬНО. Если этот файл, по каким либо причинам, НЕ БЫЛ УДАЛЕН, программа УДАЛИТ его при следующем запуске. Примечание: РЕКОМЕНДУЕТСЯ УДАЛЯТЬ временный файл самостоятельно после его использования. Уместен ли тут мем с Джеки Чаном?
#1 by PR
А что ТУТ не ТАК?
#2 by User_Agronom
Если параметр не задан, то СОЗДАЕТСЯ временный файл с расширением по умолчанию Имя временного файла.
#3 by H A D G E H O G s
Файл не создается, создается имя. Удалять не обязательно, 1С удалит его само. Ну либо винда при перезагрузке.
#4 by User_Agronom
...вынужден выборочно процитировать СП... На форуме где СП продают это не этично.
#5 by ДенисЧ
и 1с не удалит, и винда тоже...
#6 by User_Agronom
Удалит админ при чистке временных файлов.
#7 by ДенисЧ
админ != 1с && админ != винда )))
#8 by Провинциальный 1сник
Вообще конечно получать имя временного файла без одновременного создания - некомильфо. Ибо в промежутке между получением имени и открытием файла на запись кто-то другой может занять это же имя. И будет ошибка. Вероятность маленькая, но она есть. Почему 1с не позволяет создать временный файл с открытием при указании расширения - тайна великая в том. Я бы еще отметил в недостатках отсутствие возможности указать путь для файла..
#9 by ДенисЧ
Путь к временному файлу указывается в свойствах системы. На то он и временный
#10 by Провинциальный 1сник
В свойствах системы указывается путь к каталогу временных файлов. Приложениям ничто не запрещает использовать свои каталоги, однако..
#11 by dmpl
Скорее всего это просто обертка к
#12 by User_Agronom
1С берет путь временного каталога пользователя. Даже если 100500 пользователей работают в терминале, то у каждого этот каталог свой.
#13 by dmpl
+ Хотя эксперимент показал, что, видимо, 1С изобрела свой велосипед. В этом смысле становится понятной фраза "При выполнении метода файл НЕ СОЗДАЕТСЯ", т.к. штатным методом Windows файл именно создается и закрывается (что гарантирует незанятость имени файла). В случае с 1С они полагаются на однопоточность исполнения кода: у каждого экземпляра программы свой диапазон имен временных файлов (не пересекающийся с диапазонами имен файлов других процессов). Тут речь про то, что если пользователь одновременно запустит 10 экземпляров программы...
#14 by MM
Временные файлы 1С содержат в себе PID процесса, их создавшего, который уникален в каждый момент времени на компьютере, диапазон из определяется именно так. Каталог может быть свой у каждой сессии или общий зависит от настройки терминала (в ОС). 1С корректном закрытии удаляет временные файлы со своим PID. При запуске клиент проверяет все временные файлы (там используются файлы блокировок, если они заняты значит процесс с их PID выполняется), если они не принадлежат работающим экземплярам 1С, то они удаляются. Это, конечно, если именование временных файлов производится ПолучитьИмяВременногоФайла.
#15 by Провинциальный 1сник
"Временные файлы 1С содержат в себе PID процесса, их создавшего, который уникален в каждый момент времени на компьютере" Тем не менее, вероятность того, что совершенно другая программа случайно сгенерит такое же имя файла, отлична от нуля)
#16 by MM
только преднамеренно.
#17 by Провинциальный 1сник
Вероятность падения метеорита на Челябинск была крайне небольшой, очевидно он туда преднамеренно упал)
#18 by dmpl
Ну... GUID'ы тоже, теоретически, могут совпасть...
#19 by MM
какая другая программа? 1С так не сделает, а зачем посторонней программе начинать имя временного файла с "v8_". А общий шаблон выглядит так: v8_(PID)_(порядковый номер).(tmp или указанное расширение)
#20 by ДенисЧ
Не скорее всего, а именно так и есть
#21 by Гёдза
А другой экземпляр 1С?
#22 by MM
У каждого экземпляра свой уникальный PID, он может быть выдан повторно, но только после завершения процесса. Когда процесс начинает работу он удаляет старые данные, если этот PID уже использовался другим 1С, за ним всё приберут.
#23 by Torquader
Это всё так, только некоторые "умники" могут каталог временных файлов с клиента на сервере проецировать - и вот тогда начинается "кто первый - того и тапки".
#24 by Serg_1960
"Если параметр не задан, то СОЗДАЕТСЯ временный файл с расширением по умолчанию." - читать как "Если параметр не задан, то используется расширение "по умолчанию" для временных файлов."
#25 by tridog
На сервере очень даже надо. Потому что "следующий запуск программы" на сервере может быть очень не скоро) В типовых почти везде удаляют после использования (в серверном коде).
#26 by Serg_1960
Имхо, корректнее было писать более абстрактно. Типа: "Временный файл удаляется ОС после использования, а также при последующем запуске программы. Программно удалять файл после использования не обязательно, но рекомендуется."
#27 by MM
при корректном закрытии программы временные файлы тоже удаляются. А вот серверный процесс может жить долго и "добра" у него, соответственно, много скопится. не ОС, а 1С
#28 by Torquader
В стандартной функции Windows для временных файлов ставился специальный атрибут, что файл временный, и он должен быть быть удалён при следующей загрузке системы, но, во-первых, не всегда удаляет, во-вторых, для сервера, например, следующий запуск будет ой как не скоро. Конечно, можно ставить DELETE_ON_CLOSE, но для многих случаев, когда в файл пишут что-то для передачи между процессами, такой способ не подходит. Слава богу, что в Windows-системе Pid-ы могут повторно использоваться, не дожидаясь переполнения счётчика. Но, всё же, не лишним будет удалять временный файл за собой сразу после того, как он оказался не нужен, и не ждать, пока кто-то "вынесет мусор".
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С