遍历文件夹发送数据,数据文件名按时间排序,使用readdir 遍历时,没有按照文件名排序。

2017-10-15-00-00-00

2017-10-15-01-00-00

2017-10-15-02-00-00

最常见是readdir函数:

DIR *dir;

struct dirent *ptr;

dir = opendir(path.c_str());

if(NULL == dir)

{

cout << "opendir is NULL" << endl;

return;

}

while( (ptr = readdir(dir))!=NULL)

{

printf("d_ino:%ld d_off:%ld d_name: %s\n", ptr->d_ino,ptr->d_off,ptr->d_name);

}

closedir(dir);

读取/etc/rc.d/目录,输出为:

d_ino:1048669 d_off:856980470154123585 d_name: rc5.d

d_ino:1048663 d_off:884029283848728392 d_name: init.d

d_ino:1048670 d_off:999482920564082138 d_name: rc6.d

d_ino:1059943 d_off:1785792148764494467 d_name: rc

d_ino:1048667 d_off:1841410420704204566 d_name: rc3.d

d_ino:1048666 d_off:3298607144791816940 d_name: rc2.d

d_ino:1048664 d_off:4425734956780595784 d_name: rc0.d

d_ino:1059945 d_off:5016870134774381628 d_name: rc.sysinit

d_ino:1048668 d_off:5182623748018784402 d_name: rc4.d

d_ino:1048665 d_off:6942952852705976198 d_name: rc1.d

d_ino:1048658 d_off:8782171503806864933 d_name: .

d_ino:1059944 d_off:9057741989092678028 d_name: rc.local

d_ino:1048577 d_off:9223372036854775807 d_name: ..

未按照文件名排序。其中:

struct dirent *readdir(DIR *dirp);

struct dirent

{

long d_ino; /* inode number 索引节点号 */

off_t d_off; /* offset to this dirent 在目录文件中的偏移 */

unsigned short d_reclen; /* length of this d_name 文件名长 */

unsigned char d_type; /* the type of d_name 文件类型 */

char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */

}

readdir函数按照在磁盘的索引顺序,d_off来排序,如果需要按照文件名d_name,需要遍历后将文件名保存,再次排序。

查阅得知:scandir 可以实现按照规则排序

#include int scandir(const char *dirp, struct dirent ***namelist,

int (*filter)(const struct dirent *),

int (*compar)(const struct dirent **, const struct dirent **));

int alphasort(const void *a, const void *b);

int versionsort(const void *a, const void *b);

alphasort() and scandir() are specified in POSIX.1-2008, and are widely available. version-sort() is a GNU extension.

The functions scandir() and alphasort() are from 4.3BSD, and have been available under Linux since libc4.

使用scandir遍历文件夹:

struct dirent **namelist;

int n;

n = scandir(path.c_str(),&namelist,0,alphasort);

if(n < 0)

{

cout << "scandir return "<< n << endl;

}

else

{

int index=0;

while(index < n)

{

printf("d_ino:%ld d_off:%ld d_name: %s\n", namelist[index]->d_ino,namelist[index]->d_off,namelist[index]->d_name);

free(namelist[index]);

index++;

}

free(namelist);

}

输出:

d_ino:1048658 d_off:8782171503806864933 d_name: .

d_ino:1048577 d_off:9223372036854775807 d_name: ..

d_ino:1048663 d_off:884029283848728392 d_name: init.d

d_ino:1059943 d_off:1785792148764494467 d_name: rc

d_ino:1059944 d_off:9057741989092678028 d_name: rc.local

d_ino:1059945 d_off:5016870134774381628 d_name: rc.sysinit

d_ino:1048664 d_off:4425734956780595784 d_name: rc0.d

d_ino:1048665 d_off:6942952852705976198 d_name: rc1.d

d_ino:1048666 d_off:3298607144791816940 d_name: rc2.d

d_ino:1048667 d_off:1841410420704204566 d_name: rc3.d

d_ino:1048668 d_off:5182623748018784402 d_name: rc4.d

d_ino:1048669 d_off:856980470154123585 d_name: rc5.d

d_ino:1048670 d_off:999482920564082138 d_name: rc6.d

scandir函数中可以直接调用排序函数,将遍历到的文件名按照顺序保存在队列中。记得在使用后释放资源。

scandir函数通过参数4 调用比较函数实现排序,可以自定义int (*compar)(const struct dirent , const struct dirent)) 已按照某种规则来实现排序。

git@code.csdn.net:snippets/2599886.git

https://code.csdn.net/snippets/2599886

linux文件名排序规则,Linux 上readdir 遍历文件夹按文件名排序相关推荐

  1. 遍历文件夹下文件名 几种方法

    获取文件夹中文件名称 Sub test() Dim Mypath, MyName Mypath = ThisWorkbook.Path & "\"    ' 指定路径. M ...

  2. Python遍历文件夹获取文件名并写入excel

    # coding=utf-8 import os import xlwt #操作excel模块 import sysfile_path = sys.path[0]+'\\filenamelist.xl ...

  3. 随笔1:shell递归遍历文件夹

    最近工作需要,写了一些shell脚本用来做服务器一键打包更新, 通过for递归遍历文件夹时文件名中含有空格,它会当成两个文件 解决方式:修改分隔IFS #! /bin/bashfunction dfs ...

  4. Linux下遍历文件夹的实现

    转自:http://blog.csdn.net/wallwind/article/details/7528474 linux C 遍历目录及其子目录 #include <stdio.h> ...

  5. Linux怎么让文件按大小排序,linuxsortlinux系统下,按文件的大小进行排序的命令...

    怎样用sort 命令以 GPA作为关键字排序文件 Linux可以使用ls命令实现这一功能. ls命令是一个非常有用的查看文件与目录的命令,list之意,它的参数非常多. ls命令默认是按照文件名的字母 ...

  6. linux 下遍历文件夹下的所有文件

    linux C 遍历目录及其子目录 #include <stdio.h>  #include <string.h> #include <stdlib.h>  #in ...

  7. linux打开文件夹所有文件名,获取文件夹下的所有文件名 (linux windows)

    windows下获取文件夹下的所有文件名 1 #include "folder.hpp" 2 #include 3 4 void getFilesFromFolder(const ...

  8. linux遍历目录删除指定文件,利用shell脚本遍历文件夹内所有的文件并作整理统计的方法-linux删除文件夹...

    本篇文章扣丁学堂Linux培训小编给读者们分享一下利用shell脚本遍历文件夹内所有的文件并作整理统计的方法,文章具有很好的参考价值,感兴趣的小伙伴就随小编来了解一下吧. 环境: Ubuntu下采用s ...

  9. linux遍历文件夹下所有文件大小,Linux系统遍历文件夹 获取文件大小的操作(C语言实现)...

    /** linux 下遍历文件夹以及获取文件大小 */ #include #include #include #include /** 获取文件大小,但是文件大小不能超过2G ,该方法不推荐使用 */ ...

  10. Linux上怎样实现文件夹重命名

    场景 在Linux服务上上重命名文件夹使用mv命令. mv a b 将a文件夹命名为b 实现

最新文章

  1. ubuntu-Linux下如何安装Tensorflow?
  2. 三维的对象表示---OpenGL二次曲面和三次曲面函数
  3. SAP 电商云 Spartacus UI 设置 delivery mode 在 3G 慢速网络下的排队效果
  4. 魔力宝贝 服务器状态,魔力宝贝服务端standenemy的参数
  5. QQ抢车位外挂(起始篇)--小研究成果展示
  6. 【loj3056】【hnoi2019】多边形
  7. Input调用流程(好文)
  8. python爬虫 动作链进阶
  9. c语言游戏小型程序代码,C语言小游戏源码
  10. 国外苹果id_爆料者称苹果仍在继续研发iPhone屏下Touch ID
  11. 项目管理过程 工作绩效数据,信息和报告
  12. iOS开发 关于iPhone X 的适配
  13. 图数据库OrientDB-基础篇
  14. B2C之淘宝商城,图穷匕见
  15. GPU初始化和启动流程(r600)
  16. python实现调用百度词典接口实现英译汉、汉译英
  17. 动力节点springboot
  18. Java 并发编程解析 , 如何正确理解Java领域中的内存模型
  19. 通过ChaCha20-Poly1305提升SCP传输速率
  20. Nueral Motifs Experience

热门文章

  1. 英语发音规则---G字母
  2. 小技巧:办公邮箱怎么登录foxmail?outlook如何群发单显?
  3. 中国矿业大学计算机学院推免,j机电学院2008届毕业生推免工作顺利完成
  4. html鼠标悬停图片抖动,鼠标悬停时图像抖动
  5. 计算机病毒特征码主要有,基于行为分析和特征码的计算机病毒检测技术
  6. 微信亲戚备注分组名称_【微信分组备注名称大全】qq分组备注名称大全
  7. 一路走好——稻盛和夫先生
  8. 快速实现远程控制Android手机
  9. 如何成功激活win10专业版
  10. 【洛谷P1069 细胞分裂】