遍历目录下的文件,并获得属性

这篇博客详细介绍了如何使用编程语言遍历指定目录下的所有文件,包括递归遍历子目录,并获取每个文件的基本属性,如大小、创建时间等信息。这对于文件管理系统或者需要处理大量文件的场景非常实用。
摘要由CSDN通过智能技术生成
#include <stdio.h>
#include <windows.h>

void ShowFileTime(PFILETIME);
void ShowFileSize(DWORD dwLowsize,DWORD dwHighsize);
void ShowFileAttributes(LPTSTR szFileName);
void FindFile(LPTSTR szFilePath);
BOOL ModifyFilePath(LPTSTR filename,LPTSTR filepath);

void my_main(int argc,LPTSTR argv[]);

WIN32_FILE_ATTRIBUTE_DATA wfad;

WIN32_FIND_DATA wfd;
HANDLE hFile;

TCHAR strPath[MAX_PATH];

int main(int argc,LPTSTR argv[])
{
	my_main(argc,argv);

	return 0;
}

void ShowFileTime(PFILETIME pftFileTime)
{
	FILETIME ftFilelocaltime;
	SYSTEMTIME sttime;
	FileTimeToLocalFileTime(pftFileTime,&ftFilelocaltime);
	FileTimeToSystemTime(&ftFilelocaltime,&sttime);

	printf("%#4d-%#2d-%#2d %#2d:%#2d:%#2d\n",
		sttime.wYear,sttime.wMonth,sttime.wDay,sttime.wHour,sttime.wMinute,sttime.wSecond);
}

void ShowFileSize(DWORD dwLowsize,DWORD dwHighsize)
{
	ULONGLONG ullFilesize = dwHighsize;
	ULONGLONG ulldiv = 0;
	ULONGLONG ullmod = 0;

	ullFilesize <<= 32;
	ullFilesize += dwLowsize;
	
	ulldiv = ullFilesize/1024;
	ullmod = ullFilesize%1024;
	if((ullmod != 0 ) && (ulldiv == 0) )
	{
		ulldiv = 1;
	}
	printf("文件:%I64uKB\n",ulldiv);

	return;
}

void ShowFileAttributes(LPTSTR szFileName)
{
	printf("展示属性:%s\n",szFileName);
	if(!GetFileAttributesEx(szFileName,GetFileExInfoStandard,&wfad))
	{
		printf("获取文件属性失败!错误代码:%d\n",GetLastError());
		return;
	}

	printf("文件创建时间:");
	ShowFileTime(&(wfad.ftCreationTime));
	printf("文件最后访问时间:");
	ShowFileTime(&(wfad.ftLastAccessTime));
	printf("文件最后修改时间:");
	ShowFileTime(&(wfad.ftLastWriteTime));

	ShowFileSize(wfad.nFileSizeLow,wfad.nFileSizeHigh);

	return;
}

void FindFile(LPTSTR szFilePath)
{
	TCHAR szTempFilePath[MAX_PATH];
	TCHAR szSaveFilePath[MAX_PATH];
	TCHAR szFullFileName[MAX_PATH];
	ZeroMemory(szTempFilePath,MAX_PATH);
	ZeroMemory(szSaveFilePath,MAX_PATH);
	ZeroMemory(szFullFileName,MAX_PATH);
		
	lstrcpy(szTempFilePath,szFilePath);

	lstrcat(szTempFilePath,"*");
	printf("%s\n",szTempFilePath);
	HANDLE hFile = FindFirstFile(szTempFilePath,&wfd);

	if(hFile == INVALID_HANDLE_VALUE)
	{
		if(GetLastError() == 2)
		{
			printf("系统找不到指定的文件!\n");
		}		
	}

	do
	{
		lstrcpy(szSaveFilePath,szFilePath);
		lstrcpy(szFullFileName,szFilePath);
		
		if(!strcmp(wfd.cFileName,".") || !strcmp(wfd.cFileName,"..") )
		{
			continue;
		}
		//printf("文件名:%s\n",wfd.cFileName);
		if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{	
			


			sprintf(szSaveFilePath,"%s%s\\",szFilePath,wfd.cFileName);

			FindFile(szSaveFilePath);
		}
		else
		{
			sprintf(szFullFileName,"%s%s",szFilePath,wfd.cFileName);
			ShowFileAttributes(szFullFileName);
		}
		
	}while(FindNextFile(hFile,&wfd));
}


//将文件路径删除文件名,变成目录名
BOOL ModifyFilePath(LPTSTR lpSrcFileName,LPTSTR lpDestFilePath)
{
	BOOL bRet = lstrlen(lpSrcFileName) && lpSrcFileName;
	LPTSTR pstr = lpSrcFileName;

	DWORD npos = 0;
	DWORD size = lstrlen(pstr);

	if(bRet)
	{
		for(DWORD index = size;index > 0; index--)
		{
			if(pstr[index] == '\\')
			{
				break;
			}
			else
			{
				pstr[index] = '\0';	
			}
		}

		lstrcpy(lpDestFilePath,pstr);
	}

	return bRet;
}

void my_main(int argc,LPTSTR argv[])
{
	TCHAR filename[MAX_PATH];
	ZeroMemory(filename,MAX_PATH);
	TCHAR pathname[MAX_PATH];
	ZeroMemory(pathname,MAX_PATH);


	//FILETIME filelocal;
	//SYSTEMTIME st;

	if(argc <2)
	{
		if(!GetModuleFileName(NULL,filename,MAX_PATH))
		{
			printf("获取当前程序目录失败!错误代码:%d\n",GetLastError());
			return;
		}
		ModifyFilePath(filename,pathname);
		printf("第一步,文件名转化为目录:%s\n",pathname);


		FindFile(pathname);

	}
	else
	{
		printf("参数错误!用法:%s\n",argv[1]);
	}
	return;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java语言提供了丰富的API来遍历某个路径下的文件。可以通过File类来操作文件系统中的文件目录。本文将介绍Java如何遍历某个路径下的文件。 首先需要使用File类来表示该路径,然后调用File类的listFiles()方法可以得到该路径下的所有文件文件夹。listFiles()方法返回一个File类型的数组,可以遍历该数组来获取每个文件的路径和属性。 示例代码如下: ```java import java.io.*; public class FileTraversal { public static void main(String[] args) { File directory = new File("your/path/here"); // 替换为实际路径 File[] files = directory.listFiles(); if (files != null) { for (File file : files) { if (file.isDirectory()) { System.out.println("文件夹:" + file.getAbsolutePath()); // 递归遍历文件夹下的文件 traverse(file); } else { System.out.println("文件:" + file.getAbsolutePath()); } } } } private static void traverse(File directory) { File[] files = directory.listFiles(); if (files != null) { for (File file : files) { if (file.isDirectory()) { System.out.println("文件夹:" + file.getAbsolutePath()); traverse(file); } else { System.out.println("文件:" + file.getAbsolutePath()); } } } } } ``` 以上代码展示了如何遍历某个路径下的所有文件文件夹,同时也包括了递归遍历文件夹下的子文件夹和文件。在实际应用中,还可以根据需要进行文件过滤、排序等操作,来实现更加复杂的文件操作需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值