gpt4 book ai didi

c++ - 创建临时文件的多种方法 : what is the situation behind each method?

转载 作者:搜寻专家 更新时间:2023-10-31 00:19:38 29 4
gpt4 key购买 nike

我的 C++ winAPI 应用程序需要在将文件上传到服务器之前创建一个临时文件。所以我搜索了创建临时文件的方法,发现有很多方法可以做到这一点。

您能告诉我吗:对于以下每种方法,我应该在哪种情况下使用该方法?哪种方法最适合我的需求?

方法一:

// Using CreateFile()
CreateFile( "myfile.txt", GENERIC_ALL, ..., FILE_ATTRIBUTE_TEMPORARY, 0); // removed unecessary parameters

方法二:

// I think that GetTempFileName also creates the file doesn't it? Not just generates a unique fileName?
// Gets the temp path env string (no guarantee it's a valid path).
dwRetVal = GetTempPath(MAX_PATH, // length of the buffer
lpTempPathBuffer); // buffer for path

// Generates a temporary file name.
uRetVal = GetTempFileName(lpTempPathBuffer, // directory for tmp files
TEXT("DEMO"), // temp file name prefix
0, // create unique name
szTempFileName); // buffer for name

方法三:

// Create a file & use the flag DELETE_ON_CLOSE. So its a temporary file that will delete when the last HANDLE to it closes
HANDLE h_file = CreateFile( tmpfilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, NULL );

为什么创建临时文件的方法不止一种。并且,例如,我想在什么情况下使用方法 2 而不是方法 1?

最佳答案

FILE_ATTRIBUTE_TEMPORARY 只是告诉 Windows 如果有足够的缓存就不要将文件内容写入磁盘,因为该文件是临时文件,没有其他进程会使用它。

FILE_FLAG_DELETE_ON_CLOSE 意思就是它所说的 - 当您关闭文件时,它将自动删除。这保证了它将是临时的。

GetTempFilename 为临时文件创建一个名称,并保证该文件名以前未被使用过。

创建临时文件时,您应该使用所有 3 种方法。它们都不会干扰其他。

关于c++ - 创建临时文件的多种方法 : what is the situation behind each method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7816628/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com