我试过这个:
if (argc > 2) {
int i;
for(i = 0; i < argc; i++) {
if(i != 0) {
rename_file(argv[i]);
}
}
}
如果我传入两个文件名,只重命名第一个,这个循环怎么回事?
编辑:继承了rename_file函数(我觉得应该可行)
void rename_file(char const *filename) {
struct tm *clock;
struct stat attrib;
const char *dot = strrchr(filename, '.');
const char *ext = NULL;
if (dot && *dot) {
ext = dot + 1;
}
stat(filename, &attrib);
clock = gmtime(&(attrib.st_mtime));
char newname[250];
if (!ext) {
printf("ERROR: No File Extenstion");
} else {
sprintf(newname, "%02d_%02d_%02d.%s", clock->tm_mday, clock->tm_mon, clock->tm_year + 1900, ext);
}
rename(filename, newname);
}
答案 0 :(得分:1)
试试这个:
if (argc > 2) {
for(int i = 1; i < argc; i++) {
rename_file(argv[i]);
}
}
答案 1 :(得分:0)
如果您的命令行如下所示:
./renamestuff stuff.txt stuff.php
然后你可能想要这个:
for(int i = 1; i < argc; i++) {
rename_file(argv[i]);
}
答案 2 :(得分:0)
我没有看到这样的错误,但我确实在代码中看到了很多冗余。你可以这样做:
for (i = 1; i < argc; i++)
{
rename_file(argv[i]);
}
如果您没有调试器,那么您可以暂时添加一些调试printf
:
printf("argc = %d\n", argc);
for (i = 1; i < argc; i++)
{
printf("i = %d, argv[i] = %s\n", i, argv[i]);
rename_file(argv[i]);
}
这可以让您在每次调用rename_file
之前看到循环中发生了什么。
答案 3 :(得分:0)
您没有检查rename
的返回值。如果您传递在同一日期创建的两个文件的名称(并使用相同的扩展名),则第二个文件可能会失败(这取决于您的c lib)。而且,像其他人指出的那样修复你的循环。
答案 4 :(得分:-1)
第一个元素argv[0]
包含可执行文件本身的名称。因此,你的循环应该从第一个元素开始。