• 遍历文件夹计算文件行数(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. 基于线程的并行-Python 并行编程学习笔记(一)

    前言 最近写一些模拟集群智能的算法,虽然机制简单,但是随着个体的增加,设计的计算量就比较大了,尤其是加上matplotlib进行动态展示,使得运算量骤增,看着画面也比较卡.之前想把算法转化成c++代码 ...

  2. Vue npm run test 错误 (node:16672) UnhandledPromiseRejectionWarning: CssSyntaxError:xxxx.Unknown word

    记一次运行代码上传的测试服务器遇到的坑,昨天上传还好好的,今天上传就报以下错误,以为是忘记下什么插件了,简单粗暴的把node_modules下载重装了,结果还是不行,看看什么情况吧~~~ npm ru ...

  3. 记:空格normalize-space处理方法

    xpath中定位元素文本含空格 含义:通过去掉前导和尾随空白并使用单个空格替换一系列空白字符,使空白标准化 通俗一点:使要定位的文本元素,去空格并规范化 //li [normalize-space(t ...

  4. #Cisco——配置链路聚合

    Cisco--配置链路聚合 一.什么是链路聚合. 链路聚合(英语:Link Aggregation)是一个计算机网络术语,指将多个物理端口汇聚在一起,形成一个逻辑端口,以实现出/入流量吞吐量在各成员端 ...

  5. (jmeter笔记) websocket接口测试

    1.在进程选择WebSocket Sampler 2.Websocket Sampler 界面 webserver Server Name or IP:输入连接的websocket服务器ip Port ...

  6. MySQL(2): 窗口函数\备份与恢复\性能优化\权限管理

    mysql 8.0 新增了窗口函数,与Oracle一样的 MySQL从8.0开始支持窗口函数,这个功能在大多商业数据库和部分开源数据库中早已支持,有的也叫分析函数. 什么叫窗口? 窗口的概念非常重要, ...

  7. MATH1851 Trigonometric Formula Notes

    大学里老师都默认我们学过 正割 \(\sec\),余割 \(\csc\) 与余切 \(\cot\) 再加上高中的一些公式都有点遗忘,开个贴做个笔记 常规的 \(\sin x, \cos x, \tan ...

  8. lua 文件读写处理(操作敏感词库)

    最近需要给游戏做一个敏感词新系统,我采用的方法是比较常用的DFA(确定有穷状态机)算 法,先不讲算法,而这种算法的实现需要一个相应的敏感词库. 我拿到了词库后发现词库中大概有8000+个词,其中包括很 ...

  9. 对词向量模型Word2Vec和GloVe的理解

    Word2Vec Word2Vec 是 google 在2013年提出的词向量模型,通过 Word2Vec 可以用数值向量表示单词,且在向量空间中可以很好地衡量两个单词的相似性. 简述 我们知道,在使 ...

  10. c语言container_of 编译报错

    求指针ptr所在的结构体实例的首地址, #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) #define co ...