filesystems 相关问题

文件系统是在计算机系统上组织数据的一种方式。通常,文件系统由文件,文件夹(通常是特殊类型的文件)和可用于与文件交互的API组成。

如何在c++17中将std::filesystem::file_time_type转换为FILETIME形式?

如何在c++17中将std::filesystem::file_time_type转换为FILETIME形式? 我期望获得将 std::filesystem::file_time_type 变量转换为类型结构的代码示例/片段

回答 1 投票 0

是否可以在Windows上用C++模拟目录/分区

我想知道是否可以模拟一个分区,或者最好是一个目录,而不需要开发文件系统驱动程序。而且这个分区对Windows和其他应用程序都是可见的,wo...

回答 1 投票 0

Pharo 或 Squeak:如何以递归方式获取目录和文件列表

首先:我不是程序员,只是一个对 Squeak/Pharo 有一些了解的业余爱好者。所以请对技术解释保持温和...... 我有一个私人图书馆,有数千本书,ar...

回答 3 投票 0

从根路径查找空目录和子目录

给定一个路径,提供所有空目录和子目录的列表。 我找到了许多仅列出目录(子目录)或仅列出给定路径下的文件的答案。 我需要所有的清单

回答 1 投票 0

Linux 删除大小为 0 的文件[重复]

如何删除linux中的某个文件,如果它的大小为0。我想在crontab中执行它,而不需要任何额外的脚本。 l 文件名.文件 | grep 第 5 个选项卡 |不等于 0 | R M 像这样的吗?

回答 8 投票 0

ZipArchive::close() 即使具有文件夹中的所有权限也会返回 false

在本地主机上一切正常,但是当我尝试让这个脚本在服务器上工作时我却做不到。我尝试更改root和上传的权限(上传的图像在哪里以及.zip文件在哪里......

回答 3 投票 0

Ubuntu 陷入紧急模式

我正在使用 Oracle 的 VirtualBox 7.0.16,目前存在...问题: 注意:请暂时不要升级到 7.0.16。此版本存在一个问题,当虚拟机运行时,可能会导致主机操作系统崩溃

回答 1 投票 0

如何在 Windows (NTFS) 上预分配文件而不写入整个文件

我有一个应用程序需要为磁盘上可能非常大的文件(几TB)预先分配空间。该文件应占用磁盘上的空间,以便分配的空间不能被其他东西使用。 使用...

回答 1 投票 0

linux-kernel 中进程的当前目录

是否可以通过struct task_struct获取进程当前目录?我可以看到 struct fs_struct 有 pwd 指针,但我无法获取存储此信息的确切变量。 还有...

回答 2 投票 0

std::ofstream 打开成功,但是当我调用 write 时出现错误“没有这样的文件或目录”

我有这样的cpp代码: std::ofstream fs; fs.open("a.txt", ios::out | ios::binary | ios::app); 如果(fs) { if(!fs.write(缓冲区, buffer_size)) { std::cout << strerror...

回答 2 投票 0

如何在 kotlin/java 中比较两个路径的文件系统?

我想知道如何检查两个不同路径的文件系统是否相等。写类似的东西似乎是错误的 路径1.文件系统==路径2.文件系统 因为可能存在归档时的情况

回答 1 投票 0

Docker安装问题:无法挂载overlay:没有这样的设备storage-driver=overlay2

我正在尝试在 Ubuntu 20.04.3 LTS 上安装 docker。我从 *.deb 包安装。安装docker的时候,出现如下错误。 无法安装覆盖:没有此类设备存储驱动...

回答 1 投票 0

如果从 python 调用 mount 命令,文件系统将安装为只读

我有自定义的Python软件,它监视udev,如果插入了USB磁盘,它会通过调用os.system(f'mount {device.device_node} /some/path/usb')来安装它。问题是,那个U盘挂载了...

回答 2 投票 0

自定义 ls 实现中未对目录条目进行排序

我一直在尝试使用 C 中的系统调用来实现“ls”命令,但我遇到了一个小问题。无论我如何尝试,我似乎都无法对目录条目进行排序。 #包括 我一直在尝试使用 C 中的系统调用来实现“ls”命令,但我遇到了一个小问题。无论我如何尝试,我似乎都无法对目录条目进行排序。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <time.h> #include <sys/stat.h> #include <pwd.h> #include <stdbool.h> #include <unistd.h> #include <fcntl.h> #include <dirent.h> #include <limits.h> #define BUFF_MAX 1024 char* octal_to_str(int permissions){ char octal_str[4]; sprintf(octal_str, "%o", permissions); char perm_str[10] = {0}; for (int i = 0; i < 3; i++){ switch (octal_str[i]) { case '0': strcat(perm_str, "---"); break; case '1': strcat(perm_str, "--x"); break; case '2': strcat(perm_str, "-w-"); break; case '3': strcat(perm_str, "-wx"); break; case '4': strcat(perm_str, "r--"); break; case '5': strcat(perm_str, "r-x"); break; case '6': strcat(perm_str, "rw-"); break; case '7': strcat(perm_str, "rwx"); break; default: break; } } return strdup(perm_str); } char* add_dir_to_perms(bool is_dir,char* perms){ char final[11] = {0}; is_dir ? strcat(final, "d") : strcat(final, "-"); return strdup(strcat(final, perms)); } void list_verbose(const char *dirname, struct dirent* entry){ char path[BUFF_MAX]; snprintf(path, sizeof(path), "%s/%s", dirname, entry->d_name); struct stat file_stat; if(stat(path, &file_stat) == -1){ perror("Error getting file status"); return; } char* last_modified = ctime(&file_stat.st_mtime); last_modified[strlen(last_modified) - 1] = '\0'; printf("%s %ld %s %s %ld %s %s\n", add_dir_to_perms(S_ISDIR(file_stat.st_mode),octal_to_str(file_stat.st_mode & 0777)), file_stat.st_nlink, getpwuid(file_stat.st_uid)->pw_name, getpwuid(file_stat.st_gid)->pw_name, file_stat.st_size, last_modified, entry->d_name ); } void list(struct dirent* entry){ printf("%s ", entry->d_name); } int entry_cmp(const void* a, const void* b){ struct dirent* entry_a = (struct dirent*) a; struct dirent* entry_b = (struct dirent*) b; return strcasecmp(entry_a->d_name, entry_b->d_name); } void ls(const char* dirname, bool recurse, bool verbose){ char path[BUFF_MAX]; DIR* dir = opendir(dirname); char* subdir_names[BUFF_MAX]; unsigned subdir_num = 0; if(dir == NULL) { perror("Error opening directory"); exit(EXIT_FAILURE); } struct dirent* entry; struct dirent* entries[BUFF_MAX]; unsigned entry_count = 0; struct stat file_stat; if(recurse) printf("%s:\n", dirname); while((entry = readdir(dir)) != NULL){ if(entry->d_name[0] == '.') continue; entries[entry_count++] = entry; } qsort(entries, entry_count, sizeof(struct dirent*), &entry_cmp); for(unsigned i = 0; i < entry_count; i++){ entry = entries[i]; if(verbose) list_verbose(dirname, entry); else list(entry); snprintf(path, sizeof(path), "%s/%s", dirname, entry->d_name); if(stat(path, &file_stat) == -1){ perror("Error getting file status"); return; } if(S_ISDIR(file_stat.st_mode)) subdir_names[subdir_num++] = strdup(path); } printf("\n\n"); for(unsigned i = 0; recurse && i < subdir_num; i++) { ls(subdir_names[i], recurse, verbose); free(subdir_names[i]); } closedir(dir); } int main(int argc, char* argv[]){ bool VERBOSE = false; bool RECURSIVE = false; if(argc < 1|| argc > 3){ fprintf(stderr, "Usage: %s [-lR] <directory>\n", argv[0]); exit(EXIT_FAILURE); } int opt; while ((opt = getopt(argc, argv, "lR")) != -1) { switch (opt) { case 'l': VERBOSE = true; break; case 'R': RECURSIVE = true; break; default: fprintf(stderr, "Usage: %s [-lR] <directory>\n", argv[0]); exit(EXIT_FAILURE); } } char* dirname; char buff[1024]; if (optind < argc) dirname = argv[optind]; else if ((argc == 3 && RECURSIVE && VERBOSE) ||(argc == 2 && RECURSIVE) || (argc == 2 && VERBOSE) || (argc == 1)){ dirname = getcwd(buff, sizeof(buff)); }else { fprintf(stderr, "No directory specified\n"); exit(EXIT_FAILURE); } struct stat path_stat; if (stat(dirname, &path_stat) == -1) { perror("Error accessing directory"); exit(EXIT_FAILURE); } if (!S_ISDIR(path_stat.st_mode)) { fprintf(stderr, "%s is not a directory\n", dirname); exit(EXIT_FAILURE); } ls(dirname, RECURSIVE, VERBOSE); return 0; } 我尝试使用 gdb 来分析幕后发生的事情,但它似乎让我对目录条目名称感到困惑。 entry_cmp (a=0x7fffffffb160, b=0x7fffffffb168) at Ex-2/myls.c:89 89 struct dirent* entry_a = (struct dirent*) a; (gdb) step 90 struct dirent* entry_b = (struct dirent*) b; (gdb) step 91 return strcasecmp(entry_a->d_name, entry_b->d_name); (gdb) p entry_a->d_name $3 = "UUU\000\000\250\223UUUU\000\000\300\223UUUU\000\000ؓUUUU\000\000\360\223UUUU\000\000\b\224UUUU\000\000 \224UUUU\000\000\070\224UUUU\000\000P\224UUUU", '\000' <repeats 188 times> (gdb) p entry_b->d_name $4 = "UUU\000\000\300\223UUUU\000\000ؓUUUU\000\000\360\223UUUU\000\000\b\224UUUU\000\000 \224UUUU\000\000\070\224UUUU\000\000P\224UUUU", '\000' <repeats 196 times> 排序不进行的原因是什么? 从返回指针上的readdir手册页: 成功后,readdir()返回指向dirent结构的指针。 (此结构可能是静态分配的;请勿尝试对其进行free(3)。) 这里重要的一点是关于“静态分配”的。这意味着 readdir 函数可能只有一个 dirent 结构,并且它不断返回指向同一对象的指针。通过打印所有指针的值,可以在调试器中轻松检查这一点。 这意味着您需要复制结构体,而不是指针。 解决方案是将entries更改为结构体对象数组,而不是指针,然后复制返回的结构体: // ... struct dirent entries[BUFF_MAX]; // Array of objects, not pointers // ... entries[entry_count++] = *entry; // Copy the object, not the pointer // ...

回答 1 投票 0

在 Node.js 中创建一个空文件?

目前我使用 fs.openSync(文件路径, 'a') 但这有点棘手。是否有一种“标准”方法可以在 Node.js 中创建空文件?

回答 4 投票 0

c++ 如何从路径字符串中删除文件名

我有 const char *pathname = "..\somepath\somemorepath\somefile.ext"; 如何将其转化为 “..\somepath\somemorepath” ?

回答 6 投票 0

Raspberry Pi Pico:使用 Pico-SDK 从 BOOTSEL 区域读取文件

我正在使用 Raspberry Pico W,它必须充当 MQTT 客户端,并且我正在针对 C / C++ API 的 Pico-SDK 对其进行编程。 由于我要将代码用于多个 Raspberry Pico W,所以我...

回答 1 投票 0

使用 r 进行文件夹管理:检查目录是否存在,如果不存在则创建它

我经常发现自己编写的 R 脚本会生成大量输出。我发现将此输出放入其自己的目录中更干净。我在下面写的内容将检查是否存在直接...

回答 11 投票 0

FAT 文件系统上的第一个数据扇区到底在哪里?

我不太明白FAT格式磁盘上的第一个数据扇区应该在哪里(尤其是FAT-12和FAT-16)。我已经阅读了 FAT 系统的 Microsoft 文档,其中...

回答 1 投票 0

加快远程目录搜索速度

我有一些旧代码是为支持本地网络上的工作而编写的,但现在可能由远程工作人员运行。本地网络上相当快的单个文件系统访问是

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.