热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux文件夹的操作

1、DIR,是directory的缩写,是思。DIR也是是DOS操作系统用来查看磁盘中文件的命令dir有很多的参数。2、头文件:#include<dirent.h>

1、DIR,是directory的缩写,是思。DIR也是是DOS操作系统用来查看磁盘中文件的命令dir有很多的参数。

2、头文件:#include

3、对应结构体如下:

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字符 */
}
struct__dirstream
{
void*__fd; /* `struct hurd_fd' pointer for descriptor.   */
char*__data; /* Directory block.   */
int__entry_data; /* Entry number `__data' corresponds to.   */
char*__ptr; /* Current pointer into the block.   */
int__entry_ptr; /* Entry number `__ptr' corresponds to.   */
size_t__allocation; /* Space allocated for the block.   */
size_t__size; /* Total valid data in the block.   */
__libc_lock_define(, __lock) /* Mutex lock for this structure.   */
};
typedefstruct __dirstream DIR;

4、struct dirent结构体相应的函数:

opendir(),readdir(),closedir()

opendir():
头文件:#include 
#include 
函数原型
DIR* opendir(const char * path );

函数功能:打开一个目录,在失败的时候返回一个空的指针。

readdir():
语法: struct dirent*readdir(DIR* dir_handle);

返回值: dirent的结构类型

函数种类: 文件存取

内容说明 本函数用来读取目录。返回是dirent结构体指针

closedir():
closedir()关闭参数dir所指的目录流。关闭成功则返回0,失败返回-1,错误原因存于errno中。EBADF 参数dir为无效的目录流。

注意:目录文件作为一种文件,在打开必须关闭,否则会由于文件的进程打开文件过多而不能打开新的文件。因此opendir函数和closedir函数同样是配对出现的。

5、示例程序:

程序功能:从当前目录的文件夹test中读取所有文件,把所有文件的文件名存放在链表上,输出打印。对每一个对文件进行读操作,按照行进行操作,在屏幕上打印文件里的字符串。

源程序如下:

#include
#include
/*#include*/
#include 
#include
#if 0
struct dirent
{
   long d_ino; /* inode number 索引节点号 */
   off_t d_off; /* offset to this dirent 在目录文件中的偏移 */
   unsigned short d_reclen; /* length of thisd_name 文件名长 */
   unsigned char d_type; /* the type of d_name 文件类型 */
   char d_name [NAME_MAX+1]; /* file name(null-terminated) 文件名,最长255字符 */
}
struct __dirstream
{
    void *__fd; /* `struct hurd_fd' pointer fordescriptor.   */
    char *__data; /* Directory block.   */
    int __entry_data; /* Entry number `__data'corresponds to.   */
    char *__ptr; /* Current pointer into theblock.   */
    int __entry_ptr; /* Entry number `__ptr'corresponds to.   */
    size_t __allocation; /* Space allocated forthe block.   */
    size_t __size; /* Total valid data in theblock.   */
    __libc_lock_define (, __lock) /* Mutex lockfor this structure.   */
};
typedef struct__dirstream DIR;
#endif
 
int main(intargc,char *argv[])
{
    DIR *directory_pointer; //DIR是directory的缩写,是目录的意思
    struct dirent *entry;
    struct FileList
    {
            char filename[64];
            structFileList *next;
    }start,*node;
    FILE *fp = NULL;
    char buffer[20]="\0";
    if (argc!=2)
    {
            printf("Must specify adirectory\n");
            exit(1);
    }
    if((directory_pointer=opendir(argv[1]))==NULL)
            printf("Erroropening %s\n",argv[1]);
    else
    {
            start.next=NULL;
            node=&start;
            while((entry=readdir(directory_pointer))!=NULL)
            {
                   node->next=(structFileList *)malloc(sizeof(struct FileList));
                   node=node->next;
                   node->next= NULL;
                   strcpy(node->filename,entry->d_name);
                   if(strcmp(node->filename,".")==0||strcmp(node->filename,"..")==0)
                   {
                           //printf("node->filenameerror\n");
                           continue ;            
                   }
                   else
                   {
                           charpath[50]="./test/";
                           strcat(path,node->filename);
                           printf("filename=%s\n",node->filename);
                           printf("path=%s\n",path);
                           fp =fopen(path,"r");
                           if(fp== NULL)
                           {
                                  printf("%d\n",fp);
                           printf("cannotopen this file!\n");
                           continue;
                           }
                           while(!feof(fp))
                           {
                                  if(fgets(buffer,127,fp)== NULL)
                                  break;
                           buffer[strlen(buffer)-1]= '\0';     
                                  printf("%s\n",buffer);
                           }                     
                   }
                   node->next=NULL;
            }
            closedir(directory_pointer);
            node=start.next;
            while(node)
            {
                   printf("%s\n",node->filename);
                   node=node->next;
            }
    }
    system("pause");
    return0;
}

代码片段示例2:

struct FileList
{
	char file_path[64];
    struct FileList *next;
};

struct FileList *Folder(char *foldername);
int FileExtract(struct FileList *node);
struct FileList *Folder(char *foldername)
{
	DIR *directory_pointer;                         //define a folder directory pointer to folder
	struct dirent *entry; 
	struct FileList start,*node;

	if ((directory_pointer=opendir(foldername))==NULL)
	{
		printf("Error opening %s\n",foldername);
		return NULL;
	}
    	
    else
	{
		start.next=NULL;
		node=&start;
		while ((entry=readdir(directory_pointer))!=NULL)
    	{
    		if(strcmp(entry->d_name,".")!=0 && strcmp(entry->d_name,"..")!=0)
    		{
    			char path[50]="./";
				strcat(path,foldername);
				strcat(path,"/");            // relative paths,
				
      			node->next=(struct FileList *)malloc(sizeof(struct FileList));
      			node=node->next;
      			node->next = NULL;
      			strcpy(node->file_path,entry->d_name); //entry->d_name means file name
      			strcat(path,node->file_path);
      			strcpy(node->file_path,path);       //node->file_path means file the absolute path
    		}   		
    	}
		closedir(directory_pointer);
		/*

		*for test,output all file of file_path
		*/
		node=start.next;
		return node;
  	}
}

int FileExtract(struct FileList *node,mapmapword[])
{
	char buffer[MaxLine] = {'\0'};
	FILE *fp = NULL;
	int file_nodes = 0;
	while(node)
  	{
  		fp = fopen(node->file_path,"rb");
      	if(fp == NULL)
    	{
        	printf("cannot open this file!\n");
        	continue;
    	}
      	while(!feof(fp))
      	{
			if(fgets(buffer,MaxLine,fp) == NULL)
           		break;
        	buffer[strlen(buffer)-1] = '\0';	
			SegmentSentenceMM(buffer,mapword,file_nodes);//calling SegmentSentenceMM function Processes punctuation
		}	
		file_nodes++;
		node = node ->next;	
  	}
  	return file_nodes;
}

void DisFolderFilesName(struct FileList *node)
{
	while(node)
    	{
      		printf("%s\n",node->file_path);
      		node = node->next;
    	}
}


 

 


推荐阅读
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
author-avatar
太2真人05
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有