我写了一个程序,它接受一个输入文件,对它进行一些操作,并给出相应的输出文件。例如,对于inp1.txt输出为out1.txt,对于inp2.txt输出为out2.txt,以此类推,两者都在不同的文件夹中。
现在我已经使用了file_count变量并使用了switch case方法来打开特定的文件。
问题是,如果我在文件夹中再添加一个文件,那么我必须用另一个case语句重新编辑程序。
请给我建议一下目录指针的用法,我在网上找遍了,但没有找到一个确切的方法。
仅使用标准C api无法读取目录的内容,因此您必须使用特定于平台的api:
- 在*nix系统上,您使用
opendir(3)
/readdir(3)
/closedir(3)
读取目录的内容。 - 在Windows系统上,您使用
FindFirstFile
/FindNextFile
/FindClose
如果您提前知道文件名,请点击查看。它们遵循这样的模式:f1.txt f2.txt fn.txt
然后你可以遍历文件:
for (int i = 0 -> num_files)
char * filename;
filename = create_your_filename(i)
open(filename)
dostuff
close(filename)
您可以遵循相同的模式,甚至编辑输出文件的文件名。否则,您也可以使用命令
中的所有输入文件调用程序: your_program *.txt
那么所有的文件名将出现在argv[]
中,您可以遍历它。
您必须在运行时在处理之前找到输入文件夹中的文件。您可以按扩展名,文件名,创建日期等对文件进行排序。
下面是一个简单的函数,它显示一个文件(在parameters中)是否在你输入参数的路径中。
如果文件退出,返回0,否则返回1。
int is_file_enabled(char *path, char *filename)
{
char exec[255], line[255];
sprintf(exec, "ls %s | grep "%s"", path, filename);
FILE* cmd_res = popen(exec, "r");
if (cmd_res != NULL)
while (fgets(line, sizeof(line), cmd_res) != NULL)
if (line != NULL) { pclose(cmd_res); return 0; }
pclose(cmd_res);
return 1;
}