stat()st_mode似乎没有更新
stat() st_mode appears not to update
为了在每次程序执行时创建一个新目录,我写了以下内容:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string>
#include <sstream>
int main(int argc, char *argv[]) {
std::stringstream ss;
std::string base = "directory";
std::string dir;
int dir_count = 0;
bool isdir = true;
while (isdir) {
ss.str("");
ss << base << dir_count << "/";
dir_count++;
dir = ss.str();
struct stat mystat;
stat(dir.c_str(), &mystat);
if(! S_ISDIR(mystat.st_mode)) {
isdir = false;
mkdir(dir.c_str(), 0700);
}
}
}
如果第一个目录名是新的,则此操作有效;否则,如果S_ISDIR()
在第一次迭代中评估为true
,则它将在所有后续迭代中继续评估为true
,从而导致无限循环。尽管更改了已检查的目录名。我是否错误地使用了stat()
?
是的,您使用stat
不正确,因为您没有检查返回代码中的错误。如果你这样做了,你会发现stat
将失败,因为一个还不存在的文件将无法通过stat
的集合(ENOENT)。因此,在进行S_ISDIR检查之前,stat
将失败。
你想要更多的东西:
struct stat mystat;
int ret = stat(dir.c_str(), &mystat);
if (ret == -1)
if (errno == ENOENT)
if ((ret = mkdir(dir.c_str(), 0700)) != -1)
isdir = false;
else
{
perror("mkdir");
exit(1);
}
else
{
perror("stat");
exit(1);
}
相关文章:
- 从C++本机插件更新Vector3数组
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- cmake更新缓存的变量
- 更新到莫哈韦后出现cmath错误
- OpenMP:并行更新数组总是需要减少数组吗
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 指针没有更新它在void函数内部指向的值
- 如何在c++中获取要更新的值
- 已修改的LinkedList未在文本文件本身中更新
- Qt:当QListView获得新条目时,如何更新QStringList
- 更新的矢量元素不打印
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 如何在ECS框架中更新组件数据和通知系统
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- 如果我想在没有更新编译器的情况下使用新功能,该怎么办?
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 在 emscripten 网页汇编正在运行期间更新进度条?
- 在运行时使用范围更新结果
- 用非原子更新原子变量,反之亦然