How do I loop through all files in a folder using C?

前端 未结 6 1004
渐次进展
渐次进展 2020-12-06 06:00

I want to remove a particular substring from all the file names in a directory:

-- like \'XYZ.com\' from \'Futurama s1e20 - [XYZ.com].avi\' --

6条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-06 06:36

    The key functions are _findfirst, _findnext and _findclose

    struct _finddata_t file_info;
    char discard[] = "XYZ.com";
    char dir[256] = "c:\\folder\\";
    char old_path[256];
    char new_path[256];
    intptr_t handle = 0;
    
    memset(&file_info,0,sizeof(file_info));
    
    strcpy(old_path,dir);
    strcat(old_path,"*.avi");
    
    handle = _findfirst(old_path,&file_info);
    if (handle != -1)
    {
        do
        {
            char *new_name = NULL;
            char *found = NULL;
            new_name = strdup(file_info.name);
            while ((found = strstr(new_name,discard)) != 0)
            {
                int pos = found - new_name;
                char* temp = (char*)malloc(strlen(new_name));
                char* remain = found+strlen(discard);
                temp[pos] = '\0';
                memcpy(temp,new_name,pos);
                strcat(temp+pos,remain);
                memcpy(new_name,temp,strlen(new_name));
                free(temp);
            }
            strcpy(old_path,dir);
            strcat(old_path,file_info.name);
            strcpy(new_path,dir);
            strcat(new_path,new_name);
            rename(old_path,new_path);
            free(new_name);
        }while(_findnext(handle,&file_info) != -1);
    }
        _findclose(handle);
    

提交回复
热议问题