![]() |
1
5
你在这里提出了许多好主意。
不我相信我们依靠Windows来确保同一台计算机上的同一个临时文件名自启动以来不会出现两次。
不那将是一件非常糟糕的事情。 这是我用来获取临时文件的一个例程。
|
![]() |
2
5
下面是关于该功能的Delphi包装:
|
![]() |
4
3
进程ID在windows上不保证唯一。在流程的生命周期中,它们当然是唯一的,但一旦流程死亡,它的id就可以立即重用。我对ThreadId没有把握。如果这些是临时文件,您可以使用与tmpfile或tmpnam等效的东西(C函数,但我假设Delphi有一个等效的)。 Jamie发布的GUID可能更好。 |
![]() |
5
3
答复:
2) 在多核/多处理器情况下(在单个Web服务器机器上),这些功能是否唯一?
|
![]() |
6
2
比这两个选项中的任何一个都好,您应该使用系统功能 _tempnam . 它返回目录中不存在的文件的随机文件名。如果愿意,可以为_tempnam提供前缀,以便创建的文件可以识别为您的文件。如果您提供的是唯一的前缀,那么就不必担心有人会打开您的文件。然而,还有另一种解决办法。 _tempnam仅适用于将文件放入任意目录的情况。如果您不关心该目录是否为系统临时目录,请使用 tempfile_s 编辑:我投了反对票,因为这是一个C函数。通过将它们导入delphi,您可以访问C运行时。请看一些使用msvcrt.dll的示例 here .
|
![]() |
7
1
其他人都给了你一个好的、合理的想法,但仍然-如果你使用文件作为临时存储,并且如果总是先创建这些文件(不管磁盘上是否有同名的剩余文件,反正你会覆盖它),那么processid\u threadid方法是完全有效的。 使用 GetCurrentProcessID 和 GetCurrentThreadID Win32调用以访问这两个ID。 |