尝试使用 boost 文件系统 create_directories 函数在映射的网络驱动器中创建文件夹时,出现以下类型的随机错误:“系统找不到指定的路径。”。随机我的意思是有时我得到错误,有时我没有。
是的,我已经检查过:
在代码下方(经过调整以使其更简单)。
#include "boost/filesystem.hpp"
#include <string>
#include <chrono>
#include <thread>
#include <iostream>
#define MAX_RETRIES 10
#define RETRY_TIME 5000 //in millisecond
namespace fs = boost::filesystem;
bool createDirectory(const std::string& folderPath)
{
//If the function does not succeed to create the directory in first place, it will retry after RETRY_TIME miliseconds a maximum number of MAX_RETRIES.
for (unsigned int i=0; i<MAX_RETRIES; i++)
{
try
{
if (fs::create_directories(fs::path(folderPath)))
{
std::cerr << "Folder created successfully!" << std::endl;
return true;
}
}
catch (fs::filesystem_error const & e)
{
std::cerr << "File operation problem with files: " << e.what() <<". Try number: "<<i+1<<std::endl;
}
if (i==MAX_RETRIES-1)
{
return false;
}
std::this_thread::sleep_for(std::chrono::milliseconds(RETRY_TIME));
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我试图创建文件夹:
Z:\PRIVATE_FOLDERS\XXX\tests\YYY\ZZZZZ\MMMMMMM\CCCCCC\@mmmm1\@ccccc1\@eeeeeeeee2
Run Code Online (Sandbox Code Playgroud)
(Z 是网络映射驱动器):
这是输出。有时它第一次起作用
Folder created successfully!
Run Code Online (Sandbox Code Playgroud)
有时它会连续失败几次,直到它起作用为止。魔法?
File operation problem with files: "boost::filesystem::create_directories: The system cannot find the path specified: "\\?\Z:\PRIVATE_FOLDERS\XXX\tests\YYY\ZZZZZ\MMMMMMM\CCCCCC\@mmmm1\@ccccc1\@eeeeeeeee2"". try number: 1
File operation problem with files: "boost::filesystem::create_directories: The system cannot find the path specified: "\\?\Z:\PRIVATE_FOLDERS\XXX\tests\YYY\ZZZZZ\MMMMMMM\CCCCCC\@mmmm1\@ccccc1\@eeeeeeeee2"". try number: 2
File operation problem with files: "boost::filesystem::create_directories: The system cannot find the path specified: "\\?\Z:\PRIVATE_FOLDERS\XXX\tests\YYY\ZZZZZ\MMMMMMM\CCCCCC\@mmmm1\@ccccc1\@eeeeeeeee2"". try number: 3
Folder created successfully!
Run Code Online (Sandbox Code Playgroud)
这种实现的问题在于,先验无法区分输入路径是网络驱动器,还是错误路径或没有写入权限。因此,我需要始终花费 MAX_RETRIES 直到它最终失败,随之而来的性能损失。
笔记:
| 归档时间: |
|
| 查看次数: |
1434 次 |
| 最近记录: |