• 遍历文件夹计算文件行数(Windows)

主要使用的是 FindFirstFile、 FindNextFile函数寻找子目录下的文件,使用 WIN32_FIND_DATA(文件属性) 结构体

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h> char localpath[250] = {0};
int AllCodeLine = 0;
int fileNum = 0; void WriteErrToOutputFlie(char *inputpath , char *ErrMessage)
{
    FILE *fd;
    char buffer[250] = {0};     sprintf(buffer, "%s\\output.txt", inputpath);     fd = fopen(buffer, "w");
    fputs(ErrMessage, fd);
} int CreteOutputFlie(char *inputpath)
{
    FILE *fd;
    char buffer[250] = {0};     sprintf(buffer, "%s\\output.txt", inputpath);     fd = fopen(buffer, "w+");
    if(NULL == fd)
    {
        return -1;
    }     fclose(fd);
    return 0;
} int File_Check_operation(char *inputpath, char *outputpath, FILE* writefd)
{
    HANDLE hFile;
    FILE *readfd;
    int flieline = 0;
    char ErrMess[250] = {0};
    char buffer[250] = {0};
    char szSubPath[250] = {0};
    WIN32_FIND_DATA pNextInfo;     sprintf(buffer, "%s\\*", inputpath);     if( (NULL == inputpath) || (NULL == outputpath))
    {
        return -1;
    }     hFile = FindFirstFile(buffer,&pNextInfo);
    if(!hFile)
    {
        return -2;
    }     while(FindNextFile(hFile,&pNextInfo))  //loop local path,find subpath
    {
                 if(strcmp(pNextInfo.cFileName, "..") == 0 || strcmp(pNextInfo.cFileName, ".") == 0 || strcmp(pNextInfo.cFileName, "output.txt") == 0)  // filter . and ..
        {
                continue;
        }         if(pNextInfo.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)  //Check file is a directory
        {
            sprintf(szSubPath, "%s\\%s", inputpath, pNextInfo.cFileName);
            File_Check_operation(szSubPath, outputpath, writefd);
        }
        else
        {
            //except image flie
            if( strcmp( &(pNextInfo.cFileName[strlen(pNextInfo.cFileName) - 3]), "png") == 0 ||
                strcmp( &(pNextInfo.cFileName[strlen(pNextInfo.cFileName) - 3]), "gif") == 0 ||
                strcmp( &(pNextInfo.cFileName[strlen(pNextInfo.cFileName) - 3]), "swf") == 0 )
            {
                continue;
            }             fileNum++;            //file num plus             memset(buffer, 0, sizeof(buffer));
            sprintf(buffer, "%s\\%s", inputpath, pNextInfo.cFileName);             readfd = fopen(buffer, "r");
            if( readfd == NULL )
            {
                sprintf(ErrMess, "%s", "can not fopen file %s\\%s", inputpath, pNextInfo.cFileName);
                printf(ErrMess);
                WriteErrToOutputFlie(localpath, ErrMess);
            }             while(!feof(readfd))
            {
                if(fgetc(readfd) == '\n')
                    flieline++;
            }
            flieline++;           //Last line             fclose(readfd);             fprintf(writefd, "\t%s", pNextInfo.cFileName);
            fprintf(writefd, ":%d\n", flieline);
            
            AllCodeLine += flieline;
        }
        flieline = 0;     }
} int main(int argc, char *argv[])
{
    int ret = 0;
    char ErrMess[250] = {0};
    char buffer[250] = {0};
    FILE *writefd;     memset(localpath, 0, sizeof(localpath));
    
    if(argc != 2)
    {
        exit(1);
    }     strncpy_s(localpath, sizeof(localpath), argv[1], strlen(argv[1]));     ret = CreteOutputFlie(localpath);
    if(ret != 0)
    {
        sprintf(ErrMess, "%s", "main call CreteOutputFlie failed!");
        printf(ErrMess);
        WriteErrToOutputFlie(localpath, ErrMess);
    }     memset(buffer, 0, sizeof(buffer));
    sprintf(buffer, "%s\\%s", localpath, "output.txt");     writefd = fopen(buffer, "w");     ret = File_Check_operation(localpath, localpath, writefd);
    if(ret != 0)
    {
        sprintf(ErrMess, "%s", "main call File_Check_operation failed!");
        printf(ErrMess);
        WriteErrToOutputFlie(localpath, ErrMess);
    }     fprintf(writefd, "\n\n AllCodeLine is : %d", AllCodeLine);     fclose(writefd);     return 0;
}

  

代码行数统计(指定目录下所有文件的Line)的更多相关文章

  1. java代码行数统计工具类

    package com.syl.demo.test; import java.io.*; /** * java代码行数统计工具类 * Created by 孙义朗 on 2017/11/17 0017 ...

  2. python实现指定目录下批量文件的单词计数:并发版本

    在 文章 <python实现指定目录下批量文件的单词计数:串行版本>中, 总体思路是: A. 一次性获取指定目录下的所有符合条件的文件 -> B. 一次性获取所有文件的所有文件行 - ...

  3. socket实现两台FTP服务器指定目录下的文件转移(不依赖第三方jar包)

    通过socket实现两台FTP服务器指定目录下的文件转移,其中包含了基础了ftp文件列表显示.上传和下载.这里仅供学习用,需掌握的点有socket.ftp命令.文件流读取转换等 完整代码如下: Ftp ...

  4. linux --> 删除指定目录下所有文件

    删除指定目录下所有文件 代码样例: ///////////////////////////////////////////////////// //Name: DeleteFile //Purpose ...

  5. PHP 获取指定目录下所有文件(包含子目录)

    PHP 获取指定目录下所有文件(包含子目录) //glob — 寻找与模式匹配的文件路径 $filter_dir = array('CVS', 'templates_c', 'log', 'img', ...

  6. iOS案例:读取指定目录下的文件列表

    // // main.m // 读取指定目录下的文件列表 // // Created by Apple on 15/11/24. // Copyright © 2015年 Apple. All rig ...

  7. PHP 批量获取指定目录下的文件列表(递归,穿透所有子目录)

    //调用 $dir = '/Users/xxx/www'; $exceptFolders = array('view','test'); $exceptFiles = array('BaseContr ...

  8. 文件名命工具类(将指定目录下的文件的type类型的文件,进行重命名,命名后的文件将去掉type)

    import java.io.File; /** * <b>function:</b> 文件命名工具类 * @author hoojo * @createDate 2012-5 ...

  9. C# 获取指定目录下所有文件信息

    /// <summary> /// 返回指定目录下所有文件信息 /// </summary> /// <param name="strDirectory&quo ...

  10. [转]C# 获取指定目录下所有文件信息、移动目录、拷贝目录

    原文:http://blog.csdn.net/vchao13/article/details/6200255 1.获取指定目录下所有文件信息 /// <summary> /// 返回指定 ...

随机推荐

  1. vue学习笔记:环境搭建

    一.安装node.js node.js的官方地址为:https://nodejs.org/en/download/ 下载好安装包点击安装,基本就是下一步.下一步.... 安装完成后可以通过以下两种方式 ...

  2. [Unity]关于Physic Material,物理碰撞

    制作游戏时发现了一些问题,主角身上有刚体(rigbody) 在地面移动时没有什么太大的问题,但是一旦在下落时按住方向键,就会出现角色贴在墙上不下来的问题 通过其他例子发现使用了Physic Mater ...

  3. 代码随想录训练营day 3|59.螺旋矩阵II 加 数组总结篇

    59.螺旋矩阵II 题目链接:59.螺旋矩阵II 题目描述:给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1 ...

  4. nvm安装及使用(windon/mac)

    有必要说一下nvm,因为大家做前端对node都很熟悉吧.前端的很多项目中都依赖node,还有可能每个项目依赖的node版本不一样,这样我们就上了nvm. nvm 是node Version Manag ...

  5. Datax-web的入门使用

    在学习入门之前,需要先启动Datax-web(Datax-web入门配置与启动) 1.登录 账户:admin 密码:123456 2.创建项目 3.新建执行器 项目中有默认的,可以直接使用 4.新建数 ...

  6. CentOS7 搭建 PXE 安装系统

    1. PXE介绍 2. 服务的搭建 2.1 DHCP服务搭建 2.1.1 安装DHCP软件包 2.1.2 修改dhcp配置文件 2.1.3 开启DHCP服务 2.1.4 查看dhcp服务是否开启 2. ...

  7. speedtest测速

    wget https://raw.github.com/sivel/speedtest-cli/master/speedtest.py chmod a+rx speedtest.py mv speed ...

  8. django操作WEB涉及的几个命令

    1)创建项目bysms django-admin startproject bysms 2)创建应用sales (在bysms目录下执行) python manage.py startapp sale ...

  9. [iOS]遇到了一个问题:“XXXX”中无法使用Apple Pay ,检查此应用的设置并确定其设计可使用Apple Pay”

    在钥匙串里查看,发现当时申请的Merchant ID XXXX 证书过期 1. 到 apple开发者: https://developer.apple.com/account/#/overview/ ...

  10. shell_Day06

    sed命令 Linux文本处理三剑客 之 sed sed stream EDite 作为行编辑器,对文本进行编辑(以行为单位进行编辑) 注意:sed编辑文件,却不改变原文件: sed的工作原理: 指定 ...