c plus plus codereview的过程中,针对“临时目录能否唯一”的问题,检查点有哪些?请举代码一一说明。需要有错误代码示范和正确代码示范,并有示范代码的说明。并给出业界标准做法。
时间: 2023-02-14 15:34:11 浏览: 41
在 C++ 代码审查过程中,检查临时目录能否唯一的检查点可能包括以下几点:
1. 使用 std::unique_ptr<char[]> 或 std::string 创建临时目录名,并使用 std::tmpnam 或 std::tmpfile 生成唯一的文件名。
错误代码示范:
```C++
char temp_dir[] = "temp_dir";
mkdir(temp_dir);
```
正确代码示范:
```C++
std::unique_ptr<char[]> temp_dir(new char[L_tmpnam]);
std::tmpnam(temp_dir.get());
mkdir(temp_dir.get());
```
2. 创建临时目录时使用 std::filesystem::temp_directory_path 函数。
错误代码示范:
```C++
std::string temp_dir = "temp_dir";
std::filesystem::create_directory(temp_dir);
```
正确代码示范:
```C++
std::filesystem::path temp_dir = std::filesystem::temp_directory_path();
temp_dir /= "temp_dir";
std::filesystem::create_directory(temp_dir);
```
业界标准做法:
- 使用 std::filesystem 库提供的函数进行临时目录的创建,并使用 std::filesystem::temp_directory_path 函数生成唯一的临时目录名
- 在创建临时目录之前判断其是否存在,若存在则删除原有目录,避免干扰后续测试
- 在程序结束之前删除临时目录,避免占用系统资源
```C++
std::filesystem::path temp_dir = std::filesystem::temp_directory_path();
temp_dir /= "temp_dir";
if(std::filesystem::exists(temp_dir))
std::filesystem::remove_all(temp_dir);
std::filesystem::create_directory(temp_dir);
//...
std::filesystem::remove_all