批量删除文件注释

来源:互联网 发布:知乎如何进入话题广场 编辑:程序博客网 时间:2024/05/16 04:47
用以删除一个目录下类似“# *****”格式的配置文件注释,只可删除单独的行。
#include <stdio.h>#include <string.h>#include <dirent.h>#include <time.h>int traversal_dir(const char *dir, int dept);int del_file_com(const char *file_path);int main(int argc, char *argv[]){if(argc<2) {fprintf(stdout, "input dir...\n");return -1;}int dept = 0;traversal_dir(argv[1], dept);return 0;}int traversal_dir(const char *dir, int dept){DIR *dirptr = NULL;if(NULL == (dirptr=opendir(dir))) {fprintf(stdout, "no such dirpath:%s\n", dir);return -1;}struct dirent *entry;while(NULL != (entry=readdir(dirptr))) {//when the entry is sub_dir into itif((!strcmp(entry->d_name, ".")) || (!strcmp(entry->d_name, ".."))) {continue;}int i;for(i=0; i<dept; ++i) {fprintf(stdout, " ");}char dir_buf[1024];snprintf(dir_buf, sizeof(dir_buf), "%s/%s", dir, entry->d_name);if(DT_DIR == entry->d_type) { /* 4 */fprintf(stdout, "dir:%s/%s\n", dir, entry->d_name);traversal_dir(dir_buf, dept+4);} else if (DT_REG == entry->d_type) {fprintf(stdout, "file:%s\n", entry->d_name);del_file_com(dir_buf);} else {continue;}}return 0;}int del_file_com(const char *file_path){const char *old_file = file_path;char new_file[1024];snprintf(new_file, sizeof(new_file), "%s.%ld", old_file, time(NULL));//fprintf(stdout, "del_file_com...\n");//fprintf(stdout, "old_file:%s, new_file:%s\n", old_file, new_file);FILE *fp_from = fopen(old_file, "r");FILE *fp_to = fopen(new_file, "w");if((NULL==fp_from) || (NULL==fp_to)) {return -1;}char line[1024];char *cp = line;while(NULL != (fgets(cp, sizeof(line), fp_from))) {while(((' '==*cp)||('\t'==*cp)||('\n'==*cp)) && ('\0'!=*cp)) {++cp;}if(('#'!=*cp) && ('\0'!=*cp)) {fprintf(fp_to, "%s", line);}cp = line;}fclose(fp_from);fclose(fp_to);rename(new_file, old_file);return 0;}

备注:

struct dirent  {#ifndef __USE_FILE_OFFSET64    __ino_t d_ino;    __off_t d_off;#else    __ino64_t d_ino;    __off64_t d_off;#endif    unsigned short int d_reclen;    unsigned char d_type;    char d_name[256];/* We must not include limits.h! */  };#ifdef __USE_LARGEFILE64struct dirent64  {    __ino64_t d_ino;    __off64_t d_off;    unsigned short int d_reclen;    unsigned char d_type;    char d_name[256];/* We must not include limits.h! */  };#endif/* File types for `d_type'.  */enum  {    DT_UNKNOWN = 0,# define DT_UNKNOWNDT_UNKNOWN    DT_FIFO = 1,# define DT_FIFODT_FIFO    DT_CHR = 2,# define DT_CHRDT_CHR    DT_DIR = 4,# define DT_DIRDT_DIR    DT_BLK = 6,# define DT_BLKDT_BLK    DT_REG = 8,# define DT_REGDT_REG    DT_LNK = 10,# define DT_LNKDT_LNK    DT_SOCK = 12,# define DT_SOCKDT_SOCK    DT_WHT = 14# define DT_WHTDT_WHT  };



原创粉丝点击