c - 将文件移动到不同的 linux 目录

标签 c linux directory

我正在编写一个小程序,通过创建新目录并根据文件类型在其中存储文件来组织 Linux 中的目录。我知道我需要使用 rename()功能,但我怎样才能继续移动不同名称的文件?

假设我有一个 .mkv文件在我的目录中。我的程序检测文件类型并将文件移动到名为 video 的目录中(在我当前工作的目录中)。如何传递文件名,以便在移动文件时保留其名称?

以下是我对它应该如何工作的最佳猜测,但显然无法编译。我怎样才能以可以编译的方式复制它?

我已经有一个循环来运行 readdir() ,并在每个循环中检测每个条目的文件类型并使用该文件类型将文件移动到另一个目录中,因此 rename()readdir() 内的 if 语句内被调用环形。

DIR *d; 
struct dirent *dp; 
d = opendir(".");
//if statement with function to find file type
//if the file is an .mkv, it runs: 
rename(dp->d_name, "./video/%s", dp->d_name);
//how can I do this in a way that will compile?  

例子:
如果我有一个名为 scarface.mkv 的文件,它会创建一个目录video (已经完成)并移动scarface.mkv进入video目录。

最佳答案

你能不能提供完整的相关代码?您没有在此处初始化 dp,而是在重命名调用中使用它。

rename 有两个参数,都是指向字符串的指针(即字符数组)。您的代码使用 3。

%s 看起来像一个格式字符串,但你没有用例如扩展它sprintf 和一个额外的参数来替换 %s。

关于c - 将文件移动到不同的 linux 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43553888/

相关文章:

c - SIGCHLD 在 Linux 上通过 SIGCONT 发送,但在 macOS 上不发送

c - 当产品有 2 个或更多单词时,scanf() 不起作用

php - MySQL 在 Centos 上不断崩溃

apache - 阻止人们查看目录的内容

WordPress 页面名称和现有文件夹冲突

html - 浏览器文件夹上传

c - fscanf 的奇怪异常和变量声明的顺序

c - C 中的多维数组

linux -/sys/devices/system/node/node0/distance中的单位是什么

linux - 操作系统漏洞示例