我不确定我是第一个注意到这一点的人,但是(或者,有点好笑......)当我打电话时(我调试了应用程序以验证这一点)GetTempFileName(来自Windows) .pas单位),它在我的D:\中创建一个空的(0字节)文件(不知道为什么有)驱动...
我有2个逻辑驱动器...... C:\(主要)和D:\(逻辑),现在只有在第一个参数(arg0)只是一个点('。')时才调用它,这对我来说很奇怪它在D:\中创建它,因为父目录是2个点('..')。
无论如何,为此只能删除新创建的文件... -_-,我只需要文件NAME,而不是文件系统本身......
Edit1:我的问题是,为什么会发生这种情况?有没有办法避免调用创建一个新的空文件?
// 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;
答案 0 :(得分:11)
为什么GetTempFileName函数会创建新的空文件?
这是GetTempFileName
功能描述(由我强调):
为临时文件创建名称。 如果是唯一的文件名 生成,创建一个空文件,它的句柄是 公布;否则,只生成一个文件名。
使用GetTempFileName函数时如何避免创建新文件?
要么你不能让函数生成一个唯一的文件名(创建一个空文件),要么只是在GetTempFileName
函数返回后删除创建的空文件。从参考文献(我强调):
此功能创建名称的临时文件是 不会自动删除。要删除这些文件,请调用DeleteFile 。