BSL250 — TempFilesDir() method call¶
Summary¶
TempFilesDir() method call
Identifiers¶
| Field | Value |
|---|---|
| Rule code | BSL250 |
| Compatible alias | TempFilesDir |
| Severity | WARNING |
| Enabled by default | Yes |
| Implemented | Yes |
| Tags | standard, badpractice |
Behavior¶
- The public identifier
BSL250and aliasTempFilesDirare stable. - The rule reports the cases documented on this page.
- Suppressions and project configuration are applied before publication.
- The rule requires neither an external analyzer nor network access.
Configuration and suppression¶
BSL### is the primary stable identifier. The compatible alias is accepted
in select, ignore, and compatible block suppression comments.
All three suppression families support both a current line and a range. When an opening comment follows code, it affects only that line. Use any one form:
noqa:
bsl-disable:
- compatible
BSLLSform:
When the same opening comment is on a line by itself, it starts a range. Close it with the matching marker from the same family:
// noqa: BSL250
// code without this diagnostic
// noqa-enable: BSL250
// bsl-disable: BSL250
// code without this diagnostic
// bsl-enable: BSL250
// BSLLS:TempFilesDir-off
// code without this diagnostic
// BSLLS:TempFilesDir-on
To disable the rule until the end of the file, omit the closing
noqa-enable, bsl-enable, or BSLLS:…-on marker.
Opening and closing markers must belong to the same family.
Description¶
When you use GetTemporaryFileName(), 1С:Enterprise retains control over these files and by default deletes them as soon as a working process (if a file is created on the server side) or client application (if a file is created on the client side) is restarted.
If a temporary file name is generated otherwise, and the application code fails (or is for any other reason unable) to delete a temporary file, it is not controlled by the platform and is saved in the file system for an indefinite time. Lost temporary files accumulated in the system can pose a serious problem, specifically for infobases with a great number of active users (for example, in the service mode).
Examples¶
Incorrect:
Catalog = TempFilesDir();
FileName = String(New UUID) + ".xml";
TempFile = Catalog + FileName;
Data.Write(TempFile);
Correct:
To create a temporary directory, it is recommended to use the one obtained by the GetTempFileName method (with the exception of the web client).
Incorrect:
ArchFile = New ZipFileReader(FileName);
ArchCatalog = TempFilesDir()+"main_zip\";
CreateDirectory(ArchCatalog);
ArchFile.ExtractAll(ArchCatalog);
Correct:
ArchFile = New ZipFileReader(FileName);
ArchCatalog = GetTempFileName() + "\main_zip\";
CreateDirectory(ArchCatalog);
ArchFile.ExtractAll(ArchCatalog);