【问题标题】:C- - how to perform a function on all files in directory?C- - 如何对目录中的所有文件执行功能?
【发布时间】:2016-02-08 05:14:50
【问题描述】:

我正在尝试对特定目录中的所有文件执行一个功能 (void action(const char*))(我不知道它们的名称)。最简单的方法是什么? 我在 C 语言中不是很好,我在其他用户的问题中发现了一些非常有用的代码,但是我没有成功地通过这个输入使它对我有用(没有找到如何在函数的目录中找到所有文件名)

谢谢。

【问题讨论】:

  • 最重要的问题是,你为什么要这样做?您的问题缺乏适当的上下文,使用 c 程序实现这一点可能很难移植,您需要解释为什么需要 c 程序来实现这一点。也许您正在使用的库,什么... ???
  • 阅读 opendirreaddir 的文档
  • 谢谢!我想我明白了,但我在查找目录时遇到了问题。我正在使用 ubuntu,我想将它定向到桌面上名为“my”的文件夹。我应该给 opendir 函数什么 char* ?谢谢。
  • C 中没有内置方法;这是特定于操作系统的。

标签: c function file iteration


【解决方案1】:

如果您能够/愿意使用findxargs,这是一个相当轻松的解决方案。如果您没有太多文件,则不是最快的,但在易于开发和性能之间取得了良好的平衡。你可以这样做:

#include <stdio.h>

void handle_file(char* fname)
{
  FILE* fp = fopen(fname,"r");
  // deal with fp == NULL - do you want to abort or ignore if a file cannot be processed?
  // do your magic with fp
  fclose(fp);
}

int main(int argc, char** argv)
{
  int i;
  for (i = 1; i < argc; i++)
    handle_file(fname);
  return 0;
}

将其编译成二进制文件,我们称之为do_file_magic

然后来自 Bash:

find . -type f -print0 | xargs -0 ./do_file_magic

find . -type -f -exec ./do_file_magic {] \;

【讨论】:

  • 这是一个练习,我需要构建一个单独的 c 文件,该文件对给定路径中的所有文件执行功能。你知道如何只在 C 代码中做到这一点吗?谢谢。
  • 按照建议,阅读有关 opendir()/readdir() 的手册,查找示例并使用递归 - 请参阅 rosettacode.org/wiki/Walk_a_directory/… 中的示例
猜你喜欢
  • 1970-01-01
  • 2013-02-23
  • 2015-02-01
  • 2012-05-18
  • 2013-10-28
  • 1970-01-01
相关资源
最近更新 更多