OK, soweit bin ich jetzt gekommen (und alles ohne Delphi).
Wenn es funktioniert, dann braucht man nur noch einen Dateienamen anzugeben und die gewünschte Datei wird erstellt.
Also einfach 'nen Dateinamen mit einem * an der Stelle, wo die "UniqueID" eingefügt werden soll übergeben.
Und wenn man kein Verzeichnis mit dem Dateinamen übergibt, dann wird die Datei auch noch im termporären Verzeichnis vom Windows erstellt.
Delphi-Quellcode:
Function GetTempFileName(FileName):
String;
Var i, i2: Integer;
F: THandle;
Begin
If Pos('
\', FileName) = 0
Then Begin
SetLength(Result, MAX_PATH);
i := GetTempPath(MAX_PATH, @Result[1]);
SetLength(Result, i);
If (Result = '
')
or (Result[i] = '
\')
Then FileName := Result + FileName
Else FileName := Result + '
\' + FileName;
End;
If Pos('
*', FileName) = 0
Then
FileName := ChangeFileExt(FileName, '
*.' + Copy(ExtractFileExt(FileName), 1, MAX_PATH));
i := GetTickCount;
i2 := i;
Repeat
If i - i2 > 10000
Then
Raise Exception.CreateFmt('
Temporäre Datei "%s" konnte nicht erstellt werden.', [StringReplace(FileName, '
*', '
{UniqueID}', [])]);
Result := StringReplace(FileName, '
*', IntToHex(i)), []);
H := CreateFile(PChar(Result), GENERIC_WRITE, 0,
nil, CREATE_NEW,
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
or FILE_ATTRIBUTE_TEMPORARY, 0);
Inc(i);
Until H <> INVALID_HANDLE_VALUE;
CloseHandle(H);
End;
Ich hoffe mal 10.000 Versuche reichen aus, weiß ja nicht wielange es GetTempFileName probiert, oder ob/wie's überhaupt abbricht?
[edit]
so, erster Fehler behoben, jetzt nur noch sehn was mein Compiler am Wochenende dazu meint