递归打印当前目录下的所有文件的文件名和文件大小

递归打印当前目录下的所有文件的文件名和文件大小,在ubuntu14.04下编译通过:

/*************************************************************************
    > File Name: dirwalk.c
    > Author:
    > Mail:
    > Created Time: Tue 31 Mar 2015 11:56:38 AM CST
 ************************************************************************/

#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>

#define MAX_PATH 1024

/*dirwalk: apply fcn to all files in dir */
void dirwalk(char* dir, void(*fcn)(char*))
{
    struct dirent *dp;
    DIR* dfd;

    char name[MAX_PATH];
    if((dfd = opendir(dir)) == NULL)
    {
        fprintf(stderr, "dirwalk: can‘t open %s\n", dir);
        return;
    }

    while((dp = readdir(dfd)) != NULL)
    {
        if(strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0)
        {
            continue;
        }

        if(strlen(dir) + strlen(dp->d_name) + 2 > sizeof(name))
        {
            fprintf(stderr, "%s/%s too long\n", dir, dp->d_name);
        }else
        {
            sprintf(name, "%s/%s", dir, dp->d_name);
            (*fcn)(name);
        }
    }
    closedir(dfd);
}

/* print the file name and the size of the "name" */

void fsize(char* name)
{
    struct stat st_buf;
    if(stat(name, &st_buf) < 0)
    {
        fprintf(stderr, "fsize: can‘t access %s\n", name);
        return;
    }

    if((st_buf.st_mode & S_IFMT) == S_IFDIR)
    {
        printf("%ld %s\n", st_buf.st_size, name);
        dirwalk(name, fsize);
        printf("\n\n");
    }else
    {
        printf("%ld %s\n", st_buf.st_size, name);
    }
}

int main(int argc, char* argv[])
{
    if(argc == 1)
        fsize(".");
    while(--argc)
        fsize(*++argv);
    return 0;
}
时间: 2024-11-09 13:01:40

递归打印当前目录下的所有文件的文件名和文件大小的相关文章

php中通过递归实现删除目录下的所有文件

(本文转载于:www.klsele.com.cn) php中通过递归实现删除目录下的所有文件.,有需要的朋友可以参考下. 最近遇到一个实际问题,需要清空制定目录下的所有文件及清空数据库.清空数据库不难,但要如何递归删除一个目录下的所有文件呢. 于是去网上研究了下资料再加上自己琢磨解决了这一问题. 先贴代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <?php function delFile($dirName){     if ($handl

php递归取目录下的所有文件(原创)

function getdirallfiles($path) { $result=array(); $temp=array(); $dir=scandir($path); if($dir===false) { }else { foreach($dir as $value) { if($value!='.'&&$value!='..') { if(scandir("$path/$value")===false) { $result[]="$path/$value

Linux中在当前目录下查找某个文件

ZT:https://zhidao.baidu.com/question/1512088073851955780.html Linux中在当前目录下查找某个文件可以使用find命令. 1.比如在/usr/lib下查找klibc的文件,进入/usr/lib目录后,可以执行 find . -name "klibc" 说明:find命令用于查找文件,后面的"."代表当前目录,-name是find命令的参数,后面接要搜索的文件名. 2.如果不明确文件名称,可以使用通配符 f

php 读取网页源码 , 导出成txt文件, 读取xls,读取文件夹下的所有文件的文件名

<?php // 读取网页源码$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_HEADER, 1);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//这个是重点.$contents = curl_exec($curl); //导出成

php 递归和非递归遍历目录下的所有文件

//php 递归实现遍历 用dir 返回对象 <?    function loop($dir){  $mydir =dir($dir);    //以对象的形式访问     while($file = $mydir ->read()){                         //目录中有隐藏文件'.'和'..' 遍历的时候需要注意             if((is_dir("$dir/$file")) && ($file!=".&q

SVN莫名出错,网上找遍无果,递归删除当前目录下所有.svn文件名

哎,太深刻的教训. 原来以前其它目录里有.SVN目录 ,而此SVN目录COPY到真正的SVN工作目录之后,会将有用的.SVN目录覆盖. 那么一样,显然,CI,UPDATE,CO之间的命令全部异常... 搞了近一个小时才想起... 删除所有原目录下的.SVN目录,搞定!! # 在当前文件夹及子文件夹下查找.svn文件夹并递归删除 find . -name '.svn' -type d | xargs rm -rf

php简单的查找当前目录下的非法文件

<?php /** *只遍历当前目录下的文档 *@return bool */ $new = microtime(); function read_all_file($path) { if(empty($path)) { return false; } $path = rtrim($path,'/'); static $file_arr = array(); if(! is_readable($path)) { echo $path.'无权限读取文件或文件夹不存在'; return false;

uc中递归打印目录下的文件

#include <stdio.h>                                                               #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <dirent.h> #include <iostream> using nam

递归打印盘符下面的文件夹Winform

private void button1_Click(object sender, EventArgs e) { //Directory/Folder目录 FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog(); //ShowDialog对话框 if (folderBrowserDialog.ShowDialog()==DialogResult.OK) { //清除追加的效果 treeView1.Nodes.Clea