-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMaxLogic.SelfDeletingTemporaryFile.pas
More file actions
61 lines (49 loc) · 1.17 KB
/
Copy pathMaxLogic.SelfDeletingTemporaryFile.pas
File metadata and controls
61 lines (49 loc) · 1.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Unit MaxLogic.SelfDeletingTemporaryFile;
Interface
Uses
System.Classes;
Type
TTempFileStream = Class(THandleStream)
Private
fFileName: String;
Public
Constructor Create(Const aFIleName: String);
Destructor Destroy; Override;
// FullFile name
Property FileName: String Read fFileName;
End;
Implementation
Uses
System.IOUtils,
System.SysUtils,
Winapi.Windows;
{ TTempFileStream }
Constructor TTempFileStream.Create;
Var
fileHandle: THandle;
lPath: String;
Begin
lPath := extractFilePath(aFIleName);
If lPath = '' Then
lPath := TPath.GetTempPath;
lPath := IncludeTrailingPathDelimiter(lPath);
fFileName := lPath + ExtractFileName(aFIleName);
fileHandle := CreateFile(
PChar(fFileName),
GENERIC_READ Or GENERIC_WRITE,
FILE_SHARE_READ Or FILE_SHARE_WRITE,
Nil,
CREATE_ALWAYS,
FILE_ATTRIBUTE_TEMPORARY Or FILE_FLAG_DELETE_ON_CLOSE Or FILE_ATTRIBUTE_NOT_CONTENT_INDEXED,
0);
If fileHandle = INVALID_HANDLE_VALUE
Then
RaiseLastOSError(GetLastError, sLineBreak + fFileName);
Inherited Create(fileHandle);
End;
Destructor TTempFileStream.Destroy;
Begin
CloseHandle(Handle);
Inherited;
End;
End.