- 程序功能
- 精确计算一个文件夹中的所有子文件夹中的指定类型代码的行数,人为的换行都会被自动忽略不计。
- 操作方法
- 用X-Code编译完成将可执行文件拖到桌面上双击打开后根据提示操作。
- 代码如下
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int countAmount(char a[])
{
int i,sum = 0;
for(i = 0; a[i]; i++)
{
int flag = 0;
if (a[i] == 10) {
for(int j = i - 1; j > 0 && a[j] != 10; j--) {
if (a[j] != ' ' && a[j] != 13) {
flag = 1;
break;
}
}
}
if (flag) {
sum++;
}
}
if (a[i-1] != 10) {
sum++;
}
return sum;
}
int main()
{
char command[5000];
char folderPath[5000];
char suffix[20];
char tempFile[5000];
FILE *fTempFile;
char singleFile[5000];
FILE *fSingleFile;
char singleFileContent[1000000];
int singleFileAmount;
int allFileAmount;
int fileNum;
char ch,ch2;
int i,flag;
while(1)
{
printf("请拖入文件夹路径:");
scanf("%s",folderPath);
printf("请输入要合并文件的后缀(如.c,.txt):");
scanf("%s",suffix);
strcpy(command,"find ");
strcat(command,folderPath);
strcat(command," -name *");
strcat(command,suffix);
strcat(command,">>");
strcpy(tempFile,folderPath);
strcat(tempFile,"/temp.txt");
strcat(command,tempFile);
system(command);
fTempFile = fopen(tempFile,"r");
fileNum = 0;
allFileAmount = 0;
while(1)
{
i=-1;
while((singleFile[++i]=fgetc(fTempFile))!=10&&singleFile[i]!=EOF);
if(singleFile[i]==EOF)
{
break;
}
singleFile[i]=0;
singleFileAmount = 0;
ch2 = 0;
fSingleFile=fopen(singleFile,"r");
i=0;
while((ch=fgetc(fSingleFile))!=EOF)
{
singleFileContent[i++] = ch;
}
singleFileContent[i] = 0;
singleFileAmount = countAmount(singleFileContent);
fileNum++;
printf("%d:%d行 %s\n",fileNum,singleFileAmount,singleFile);
allFileAmount += singleFileAmount;
fclose(fSingleFile);
}
fclose(fTempFile);
strcpy(singleFile,"rm ");
strcat(singleFile,tempFile);
system(singleFile);
printf("\n\n此文件夹下:\n\n");
printf("共计%d个.c文件\n\n",fileNum);
printf("共计代码:%d行\n\n",allFileAmount);
}
return 0;
}