批量删除文件注释

用以删除一个目录下类似“# *****”格式的配置文件注释,只可删除单独的行。
#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 it
		if((!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_LARGEFILE64
struct 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_UNKNOWN	DT_UNKNOWN
    DT_FIFO = 1,
# define DT_FIFO	DT_FIFO
    DT_CHR = 2,
# define DT_CHR		DT_CHR
    DT_DIR = 4,
# define DT_DIR		DT_DIR
    DT_BLK = 6,
# define DT_BLK		DT_BLK
    DT_REG = 8,
# define DT_REG		DT_REG
    DT_LNK = 10,
# define DT_LNK		DT_LNK
    DT_SOCK = 12,
# define DT_SOCK	DT_SOCK
    DT_WHT = 14
# define DT_WHT		DT_WHT
  };



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值