私がこれに最初に気付いたのかどうかはわかりませんが、(笑、ちょっと面白いです...)電話をかけるたびに(これを確認するためにアプリケーションをデバッグしました)GetTempFileName(Windows.pasユニットから) )、それは私のD:\(なぜそこにあるのかわからない)ドライブに空の(0バイト)ファイルを作成します...
私は2つの論理ドライブを持っています...C:\(プライマリ)とD:\(論理)、これは最初の引数(arg0)が単なるドット('。')であるときに呼び出す場合にのみ発生します。これは奇妙です親ディレクトリが2ドット('..')であるため、D:\に作成されます。
とにかく、これに対するダミーのバイパスは、新しく作成されたファイルを削除することです... -_-、必要なのはファイルシステム自体ではなく、ファイル名だけです...
編集1:私の質問は、なぜこれが起こっているのですか?そして、呼び出しが新しい空のファイルを作成するのを避ける方法はありますか?
// Creates a name for a temporary file.
Function GetTempFileName(const ext: string): string;
var
// This buffer should be MAX_PATH characters to accommodate the path plus the terminating null character.
lpTempFileName: Array[0..MAX_PATH] of char;
begin
// If uUnique is zero, GetTempFileName creates an empty file and closes it.
// If uUnique is not zero, you must create the file yourself. Only a file name is created
Windows.GetTempFileName('.', nil, 0, lpTempFileName);
DeleteFile(lpTempFileName); // delete created file
Result := ChangeFileExt(lpTempFileName, ext);
Delete(Result, 1, 2); // ".\"
end;