linux文件名排序规则,Linux 上readdir 遍历文件夹按文件名排序
遍历文件夹发送数据,数据文件名按时间排序,使用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 遍历文件夹按文件名排序相关推荐
- 遍历文件夹下文件名 几种方法
获取文件夹中文件名称 Sub test() Dim Mypath, MyName Mypath = ThisWorkbook.Path & "\" ' 指定路径. M ...
- Python遍历文件夹获取文件名并写入excel
# coding=utf-8 import os import xlwt #操作excel模块 import sysfile_path = sys.path[0]+'\\filenamelist.xl ...
- 随笔1:shell递归遍历文件夹
最近工作需要,写了一些shell脚本用来做服务器一键打包更新, 通过for递归遍历文件夹时文件名中含有空格,它会当成两个文件 解决方式:修改分隔IFS #! /bin/bashfunction dfs ...
- Linux下遍历文件夹的实现
转自:http://blog.csdn.net/wallwind/article/details/7528474 linux C 遍历目录及其子目录 #include <stdio.h> ...
- Linux怎么让文件按大小排序,linuxsortlinux系统下,按文件的大小进行排序的命令...
怎样用sort 命令以 GPA作为关键字排序文件 Linux可以使用ls命令实现这一功能. ls命令是一个非常有用的查看文件与目录的命令,list之意,它的参数非常多. ls命令默认是按照文件名的字母 ...
- linux 下遍历文件夹下的所有文件
linux C 遍历目录及其子目录 #include <stdio.h> #include <string.h> #include <stdlib.h> #in ...
- linux打开文件夹所有文件名,获取文件夹下的所有文件名 (linux windows)
windows下获取文件夹下的所有文件名 1 #include "folder.hpp" 2 #include 3 4 void getFilesFromFolder(const ...
- linux遍历目录删除指定文件,利用shell脚本遍历文件夹内所有的文件并作整理统计的方法-linux删除文件夹...
本篇文章扣丁学堂Linux培训小编给读者们分享一下利用shell脚本遍历文件夹内所有的文件并作整理统计的方法,文章具有很好的参考价值,感兴趣的小伙伴就随小编来了解一下吧. 环境: Ubuntu下采用s ...
- linux遍历文件夹下所有文件大小,Linux系统遍历文件夹 获取文件大小的操作(C语言实现)...
/** linux 下遍历文件夹以及获取文件大小 */ #include #include #include #include /** 获取文件大小,但是文件大小不能超过2G ,该方法不推荐使用 */ ...
- Linux上怎样实现文件夹重命名
场景 在Linux服务上上重命名文件夹使用mv命令. mv a b 将a文件夹命名为b 实现
最新文章
- ubuntu-Linux下如何安装Tensorflow?
- 三维的对象表示---OpenGL二次曲面和三次曲面函数
- SAP 电商云 Spartacus UI 设置 delivery mode 在 3G 慢速网络下的排队效果
- 魔力宝贝 服务器状态,魔力宝贝服务端standenemy的参数
- QQ抢车位外挂(起始篇)--小研究成果展示
- 【loj3056】【hnoi2019】多边形
- Input调用流程(好文)
- python爬虫 动作链进阶
- c语言游戏小型程序代码,C语言小游戏源码
- 国外苹果id_爆料者称苹果仍在继续研发iPhone屏下Touch ID
- 项目管理过程 工作绩效数据,信息和报告
- iOS开发 关于iPhone X 的适配
- 图数据库OrientDB-基础篇
- B2C之淘宝商城,图穷匕见
- GPU初始化和启动流程(r600)
- python实现调用百度词典接口实现英译汉、汉译英
- 动力节点springboot
- Java 并发编程解析 , 如何正确理解Java领域中的内存模型
- 通过ChaCha20-Poly1305提升SCP传输速率
- Nueral Motifs Experience