GetTempPath和GetTempFileName函数
来源:互联网 发布:java导入jar包 编辑:程序博客网 时间:2024/05/01 19:57
0x01.GetTempPath函数
- GetTempPath是程序代码,用于获取为临时文件指定的路径。
DWORD WINAPI GetTempPath( _In_ DWORD nBufferLength, //字符串缓冲区的大小由lpBuffer标识,在TCHARs中。 _Out_ LPTSTR lpBuffer //指向字符串缓冲区的指针,它接收指定临时文件路径的以空字符结尾的字符串。 返回的字符串以反斜杠结尾,例如“C:\ TEMP \”。);
返回值
如果函数成功,返回值是复制到lpBuffer
的字符串的长度(以TCHAR
为单位),不包括终止空字符。 如果返回值大于nBufferLength
,则返回值是保存路径所需的缓冲区的长度(以TCHAR
为单位)。
如果函数失败,返回值为零。 要获取扩展错误信息,请调用GetLastError
。最大可能的返回值为MAX_PATH + 1(261)
。
0x02.GetTempFileName函数
- 创建临时文件的名称。 如果生成了唯一的文件名,则会创建一个空文件,并释放其句柄; 否则,仅生成文件名。
UINT WINAPI GetTempFileName( _In_ LPCTSTR lpPathName, _In_ LPCTSTR lpPrefixString, _In_ UINT uUnique, _Out_ LPTSTR lpTempFileName);
参数
lpPathName [in]
文件名的目录路径。应用程序通常为当前目录或GetTempPath函数的结果指定句点(。)。该字符串不能超过MAX_PATH-14个字符或GetTempFileName将失败。如果此参数为NULL,则函数将失败。
lpPrefixString [in]
以null结尾的前缀字符串。该函数使用此字符串的前三个字符作为文件名的前缀。此字符串必须由OEM定义的字符集中的字符组成。
独特的
uUnique [in]
用于创建临时文件名的无符号整数。有关详细信息,请参阅注释。
如果uUnique
为零,则函数将尝试使用当前系统时间形成唯一的文件名。如果文件已存在,则数字增加1,并且函数测试此文件是否已存在。这样继续,直到找到唯一的文件名;该函数使用该名称创建一个文件并关闭它。请注意,当uUnique
非零时,该函数不会尝试验证文件名的唯一性。
lpTempFileName [out]
指向接收临时文件名的缓冲区的指针。此缓冲区应为MAX_PATH个字符,以容纳路径和终止空字符。
0x03.Example
- 创建和使用零时文件。
//// This application opens a file specified by the user and uses// a temporary file to convert the file to upper case letters.// Note that the given source file is assumed to be an ASCII text file// and the new file created is overwritten each time the application is// run.//#include <windows.h>#include <tchar.h>#include <stdio.h>#define BUFSIZE 1024void PrintError(LPCTSTR errDesc);int _tmain(int argc, TCHAR *argv[]){ HANDLE hFile = INVALID_HANDLE_VALUE; HANDLE hTempFile = INVALID_HANDLE_VALUE; BOOL fSuccess = FALSE; DWORD dwRetVal = 0; UINT uRetVal = 0; DWORD dwBytesRead = 0; DWORD dwBytesWritten = 0; TCHAR szTempFileName[MAX_PATH]; TCHAR lpTempPathBuffer[MAX_PATH]; char chBuffer[BUFSIZE]; LPCTSTR errMsg; if(argc != 2) { _tprintf(TEXT("Usage: %s <file>\n"), argv[0]); return -1; } // Opens the existing file. hFile = CreateFile(argv[1], // file name GENERIC_READ, // open for reading 0, // do not share NULL, // default security OPEN_EXISTING, // existing file only FILE_ATTRIBUTE_NORMAL, // normal file NULL); // no template if (hFile == INVALID_HANDLE_VALUE) { PrintError(TEXT("First CreateFile failed")); return (1); } // 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 if (dwRetVal > MAX_PATH || (dwRetVal == 0)) { PrintError(TEXT("GetTempPath failed")); if (!CloseHandle(hFile)) { PrintError(TEXT("CloseHandle(hFile) failed")); return (7); } return (2); } // 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 if (uRetVal == 0) { PrintError(TEXT("GetTempFileName failed")); if (!CloseHandle(hFile)) { PrintError(TEXT("CloseHandle(hFile) failed")); return (7); } return (3); } // Creates the new file to write to for the upper-case version. hTempFile = CreateFile((LPTSTR) szTempFileName, // file name GENERIC_WRITE, // open for write 0, // do not share NULL, // default security CREATE_ALWAYS, // overwrite existing FILE_ATTRIBUTE_NORMAL,// normal file NULL); // no template if (hTempFile == INVALID_HANDLE_VALUE) { PrintError(TEXT("Second CreateFile failed")); if (!CloseHandle(hFile)) { PrintError(TEXT("CloseHandle(hFile) failed")); return (7); } return (4); } // Reads BUFSIZE blocks to the buffer and converts all characters in // the buffer to upper case, then writes the buffer to the temporary // file. do { if (ReadFile(hFile, chBuffer, BUFSIZE, &dwBytesRead, NULL)) { // Replaces lower case letters with upper case // in place (using the same buffer). The return // value is the number of replacements performed, // which we aren't interested in for this demo. CharUpperBuffA(chBuffer, dwBytesRead); fSuccess = WriteFile(hTempFile, chBuffer, dwBytesRead, &dwBytesWritten, NULL); if (!fSuccess) { PrintError(TEXT("WriteFile failed")); return (5); } } else { PrintError(TEXT("ReadFile failed")); return (6); } // Continues until the whole file is processed. } while (dwBytesRead == BUFSIZE); // The handles to the files are no longer needed, so // they are closed prior to moving the new file. if (!CloseHandle(hFile)) { PrintError(TEXT("CloseHandle(hFile) failed")); return (7); } if (!CloseHandle(hTempFile)) { PrintError(TEXT("CloseHandle(hTempFile) failed")); return (8); } // Moves the temporary file to the new text file, allowing for differnt // drive letters or volume names. fSuccess = MoveFileEx(szTempFileName, TEXT("AllCaps.txt"), MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED); if (!fSuccess) { PrintError(TEXT("MoveFileEx failed")); return (9); } else _tprintf(TEXT("All-caps version of %s written to AllCaps.txt\n"), argv[1]); return (0);}// ErrorMessage support function.// Retrieves the system error message for the GetLastError() code.// Note: caller must use LocalFree() on the returned LPCTSTR buffer.LPCTSTR ErrorMessage(DWORD error) { LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL); return((LPCTSTR)lpMsgBuf);}// PrintError support function.// Simple wrapper function for error output.void PrintError(LPCTSTR errDesc){ LPCTSTR errMsg = ErrorMessage(GetLastError()); _tprintf(TEXT("\n** ERROR ** %s: %s\n"), errDesc, errMsg); LocalFree((LPVOID)errMsg);}
0 0
- GetTempPath和GetTempFileName函数
- WinAPI: GetTempFileName
- 获取Linux系统临时目录文件(类似Windows下的GetTempPath)
- 函数和函数对象
- 函数指针和函数
- 函数原型和函数
- fread函数和fwrite函数
- 指针函数和函数指针
- 函数指针和函数对象
- 函数指针和函数编译
- fread函数和fwrite函数
- fread函数和fwrite函数
- 函数指针和指针函数
- fread函数和fwrite函数
- strcmp函数和strcpy函数
- 静态函数和构造函数
- implode()函数和explode()函数
- 指针函数和函数指针
- 解决Eclipse使用Maven下载慢的问题
- [http] HTTP Responses Header 响应头
- 织梦后台内容编辑器不显示
- React入门教程
- 软件开发入门
- GetTempPath和GetTempFileName函数
- 数据结构 排序
- 辛路
- cnpm的使用
- 14.1 多线程(1)
- 基于matlab的边缘提取方法的比较
- spring事件驱动模型--观察者模式在spring中的应用
- vi,vim 常用的快捷键
- Storm 并行度分配原理及优化