linuxc遍歷文件
㈠ linux下C語言怎麼統計某個目錄下的文件個數
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <errno.h>
#include <string.h>
#define MAX 1024
int get_file_count(char *root)
{
DIR *dir;
struct dirent * ptr;
int total = 0;
char path[MAX];
dir = opendir(root); /* 打開目錄*/
if(dir == NULL)
{
perror("fail to open dir");
exit(1);
}
errno = 0;
while((ptr = readdir(dir)) != NULL)
{
//順序讀取每一個目錄項;
//跳過「..」和「.」兩個目錄
if(strcmp(ptr->d_name,".") == 0 || strcmp(ptr->d_name,"..") == 0)
{
continue;
}
//printf("%s%s/n",root,ptr->d_name);
//如果是目錄,則遞歸調用 get_file_count函數
if(ptr->d_type == DT_DIR)
{
sprintf(path,"%s%s/",root,ptr->d_name);
//printf("%s/n",path);
total += get_file_count(path);
}
if(ptr->d_type == DT_REG)
{
total++;
printf("%s%s/n",root,ptr->d_name);
}
}
if(errno != 0)
{
printf("fail to read dir"); //失敗則輸出提示信息
exit(1);
}
closedir(dir);
return total;
}
int main(int argc, char * argv[])
{
int total;
if(argc != 2)
{
printf("wrong usage/n");
exit(1);
}
total = get_file_count(argv[1]);
printf("%s ha %d files/n",argv[1],total);
return 0;
}
㈡ Linux中針對文件夾下的所有文件隔斷時間,看看哪些文件或者文件夾有改動
應該可以遍歷指定目錄下的所有子目錄和文件,然後查看修改時間。
不太清除LINUX下如果文件修改後是否會有事件通知,windows下是有的。
㈢ linux C 中的文件夾遍歷dirent 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
};
這是d_type的枚舉類型..........每個值表示一個類型..........4是目錄,0是未知,1是管道,2是字元設備,8表示文件...............6是塊設備..........其他的都如字面表示..........很容易區分.........
㈣ Linux下C語言:如何遍歷制定目錄及其子目錄下所有文件的文件名並將其按照最後修改時間排序呢
linux中有相關的API函數,可以讀取目錄中所有的文件名字,以及時間屬性信息,你把這些信息讀出來,利用各種排序演算法排序就可以了
㈤ C 語言統計一個目錄下的文件個數 windows linux C C++
沒有這種函數。如果有,那麼文件系統會變得很不穩定也不夠效率:試想在多級目錄下有大量文件,將這些文件一個個刪除,如果有這個函數,那麼代表每刪除一個文件,所有相關目錄都需要修改一次屬性,總的IO甚至能達到沒有這個功能的文件系統的N倍,傷硬碟不說,速度必然大打折扣,這對於可能需要作為伺服器(伺服器往往會有大量文件操作以及需要快速響應)使用的操作系統來說是很不利的。當然文件數雖然不會保存在目錄屬性里,但是windows遍歷過目錄後對這個目錄的文件數有一個緩存,只要緩存還有效,下次再請求文件數的時候讀取的是這個緩存
㈥ c linux reiserfs文件系統中遍歷文件夾
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>
void printdir(char* dir, int depth)
{
DIR *dp;
struct dirent *entry;
struct stat statbuf;
if( (dp = opendir(dir)) == NULL )
{
fprintf(stderr, "cannot open directory: %s\n", dir);
return;
}
chdir(dir);
while( (entry = readdir(dp)) != NULL)
{
lstat(entry->d_name, &statbuf);
if( S_ISDIR(statbuf.st_mode) )
{
if( strcmp(".", entry->d_name) == 0 || strcmp("..", entry->d_name) == 0 )
continue;
printf("%*s%s/\n", depth, "", entry->d_name);
printdir(entry->d_name, depth+4);
}
else
printf("%*s%s\n", depth, "", entry->d_name);
}
chdir("..");
closedir(dp);
}
int main(int argc, char* argv[])
{
char *topdir = ".";
if( argc >= 2 )
topdir=argv[1];
printf("Directory scan of %s\n", topdir);
printdir(topdir, 0);
printf("Done.\n");
exit(0);
}
㈦ Linux下C/C++怎樣編一個復制文件夾的程序
可以遞歸遍歷文件夾下所有文件,根據文件大小和修改時間進行判斷,把修改過的新版本覆蓋舊版本。
本人並沒有在Linux下編程的經驗,只能給出思路,你找找Linux的系統調用,裡面有需要文件操作功能,復制文件夾無非就是先創建文件夾,然後在把文件夾下的文件復制過來。對於文件夾內的文件夾,使用遞歸進行遍歷。
我想你對遞歸應該了解,如果不想用系統調用的話,在Linux下我記得命令mkdir是創建文件夾,cp是復制文件,這樣你可以在程序內使用system("mkdir 文件夾名")來進行創建文件夾,對應的可以用cp復制文件,不過這樣比用系統調用效率低點
另:個人理解,Linux的系統調用跟Windows的API比較類似
㈧ 如何在linux系統中用C語言編程實現以非遞歸的方式查詢指定目錄下所有子目錄的全部文件並保存文件名
把迭代得到的非文件文件夾項,即子目錄保存到一個stack中。
隨後逐個彈出棧頂元素並迭代之,就實現了以非遞歸方式遍歷文件夾。
㈨ 欲在Linux系統下使用終端編寫C語言程序,打算使用findfirst()、findnext()和fin
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
int
main(int argc, char *argv[])
{
intptr_t handle;
struct _finddata_t fileinfo;
handle = _findfirst("D:\\mymtom\\src\\demo\\*.c", &fileinfo);
if (handle == -1) {
perror("_findfirst");
exit(1);
}
printf("%s\n",fileinfo.name);
while (_findnext(handle, &fileinfo) == 0) {
printf("%s\n",fileinfo.name);
}
_findclose(handle);
return 0;
}
㈩ linux shell 遍歷文件夾 並將結果保存 到變數
#!/bin/bash
(($#<1))&&echo"paramiszero!"&&exit1
[!-d$1]&&echo"$1notpath"&&exit1
dir=$1
dir_p="$dirDirectory:"
cd$dir
dir=`pwd`
foriin`ls$dir`
do
if[-d$i];then
/tmp/sh/dir_file$i#我的腳本文件在/tmp/sh中,需要改一下這里
else
dir_p="$dir_pFile$i"
fi
done
cd..
echo$dir_p
實驗結果:
[root@localhost sh]# ./dir_file /tmp/python/
python_2 Directory : File 1.log File 2.log
python_3 Directory : File 3.log
/tmp/python/ Directory : File p File t.py File y.py
這樣應該可以吧,試試看