Windows编程基础 第十二章 磁盘 目录 文件 查找文件

本文是截图:Windows编程基础 第十二章   磁盘    目录    文件   查找文件

本文的pdf下载地址是:http://yunpan.cn/cdthxZNtSatEn  访问密码 a4b4











// 本程序用来演示磁盘操作

#include "stdafx.h"
#include "locale.h"
VOID  ShowSpace(TCHAR * pszDrive)
{
 /*主要是两个函数的使用和一个结构体的使用
BOOL WINAPI GetDiskFreeSpace(
__in   LPCTSTR lpRootPathName,
__out  LPDWORD lpSectorsPerCluster,
__out  LPDWORD lpBytesPerSector,
__out  LPDWORD lpNumberOfFreeClusters,
__out  LPDWORD lpTotalNumberOfClusters
);

typedef union _LARGE_INTEGER {
									struct {
											DWORD LowPart;
											LONG HighPart;
									} DUMMYSTRUCTNAME;
									struct {
									DWORD LowPart;
									LONG HighPart;
									} u;
									#endif //MIDL_PASS
									LONGLONG QuadPart;
							} LARGE_INTEGER;

BOOL WINAPI GetDiskFreeSpaceEx(
__in_opt   LPCTSTR lpDirectoryName,
__out_opt  PULARGE_INTEGER lpFreeBytesAvailable,
__out_opt  PULARGE_INTEGER lpTotalNumberOfBytes,
__out_opt  PULARGE_INTEGER lpTotalNumberOfFreeBytes
);
*/ 
	DWORD nSectorsPerCluster=0;
	DWORD nBytesPerSector=0;
	DWORD nNumberOfFreeClusters=0;
	DWORD nTotalNumberOfClusters=0;
	GetDiskFreeSpace(pszDrive,&nSectorsPerCluster,&nBytesPerSector,&nNumberOfFreeClusters,&nTotalNumberOfClusters);
	_tprintf(TEXT("\tSectorsPerCluster=%d\n\tBytesPerSector=%d\n\tNumberOfFreeClusters=%d\n\tnTotalNumberOfClusters=%d"),
		nSectorsPerCluster,nBytesPerSector,nNumberOfFreeClusters,nTotalNumberOfClusters);
	printf("\n\n");
	ULARGE_INTEGER FreeBytesAvailable={0};
	ULARGE_INTEGER TotalNumberOfBytes={0};
	ULARGE_INTEGER TotalNumberOfClusters={0};
	GetDiskFreeSpaceEx(pszDrive,&FreeBytesAvailable,&TotalNumberOfBytes,&TotalNumberOfClusters);
	_tprintf(TEXT("\n\tFreeBytesAvailable= %d GB"),FreeBytesAvailable.QuadPart>>30);
	_tprintf(TEXT("\n\tTotalNumberOfBytes= %d GB") ,TotalNumberOfBytes.QuadPart>>30);
	_tprintf(TEXT("\n\tTotalNumberOfClusters= %d GB\n"),TotalNumberOfClusters.QuadPart>>30);	         
}
      
VOID ShowVolumeInfo(TCHAR * pszDrive)
{
	/*
	BOOL WINAPI GetVolumeInformation(
											__in_opt   LPCTSTR lpRootPathName,
											__out      LPTSTR lpVolumeNameBuffer,
											__in       DWORD nVolumeNameSize,
											__out_opt  LPDWORD lpVolumeSerialNumber,
											__out_opt  LPDWORD lpMaximumComponentLength,
											__out_opt  LPDWORD lpFileSystemFlags,
											__out      LPTSTR lpFileSystemNameBuffer,
											__in       DWORD nFileSystemNameSize
			);
	*/
	TCHAR szVolumeNameBuffer[MAX_PATH]={0};
	DWORD nVolumeNameSize=0;
	DWORD VolumeSerialNumber=0;
	DWORD MaximumComponentLength=0;
	DWORD FileSystemFlags=0;
	TCHAR  szFileSystemNameBuffer[MAX_PATH]={0};
	DWORD nFileSystemNameSize=0;
	GetVolumeInformation(pszDrive,
						szVolumeNameBuffer,
						MAX_PATH,
						&VolumeSerialNumber,
						&MaximumComponentLength,
						&FileSystemFlags,
						szFileSystemNameBuffer,
						MAX_PATH);
	//这个数值会显示空,就是没有数值,如果进行调试的话,那么将看到这个里面都是0
	_tprintf(TEXT("\tszVolumeNameBuffer=%s\n"),szVolumeNameBuffer);
	_tprintf(TEXT("\tVolumeSerialNumber=%08X\n"),VolumeSerialNumber);
	_tprintf(TEXT("\tMaximumComponentLength=%d\n"),MaximumComponentLength);
	_tprintf(TEXT("\tFileSystemFlags=%08X\n"),FileSystemFlags);
	_tprintf(TEXT("\tszFileSystemNameBuffer=%s\n"),szFileSystemNameBuffer);
}
    
VOID ShowType(TCHAR * pszDrive)
{
	/*UINT WINAPI GetDriveType( __in_opt  LPCTSTR lpRootPathName); */
	UINT nResult=GetDriveType(pszDrive);
	switch(nResult)
	{
	case DRIVE_UNKNOWN:
		_tprintf(TEXT("\t%s\n"),TEXT("硬盘类型:DRIVE_UNKNOWN"));
		break;
	case DRIVE_REMOVABLE:
		_tprintf(TEXT("\t%s\n"),TEXT("硬盘类型:DRIVE_REMOVABLE"));
		break;
	case DRIVE_FIXED:
		_tprintf(TEXT("\t%s\n"),TEXT("硬盘类型:DRIVE_FIXED"));
		break;
	case DRIVE_CDROM:
		_tprintf(TEXT("\t%s\n"),TEXT("硬盘类型:DRIVE_CDROM"));
		break;
	case DRIVE_REMOTE:
		_tprintf(TEXT("\t%s\n"),TEXT("硬盘类型:DRIVE_REMOTE"));
		break;

	}
}

VOID  ShowVolume()//显示卷标
{
	//获取系统卷标位的标示
     DWORD nDrives=GetLogicalDrives();//每一位代表一个磁盘驱动器
	_tprintf(TEXT("Drives:%08X\n"),nDrives);

	//获取系统卷的所有盘符
	TCHAR szText[MAX_PATH]=TEXT("");
	//返回一个字符串的串,这个字符串的串中包含有整个系统中所有磁盘的盘符
	GetLogicalDriveStrings(MAX_PATH,szText);
	/*下面的代码是用来打印字符串的串的常用的简单算法。*/
	TCHAR * szTemp=szText;
	while (0!=szTemp[0])
	{
		printf("\n---------------------------------------------------------------\n");
		_tprintf(TEXT("Drives:%s\n"),szTemp);
		ShowVolumeInfo(szTemp);
		ShowType(szTemp);
		ShowSpace(szTemp);
	//	printf("\n---------------------------------------------------------------\n");
		szTemp=szTemp+_tcslen(szTemp)+1;
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL,"chs");
	_tprintf(TEXT("%s"),TEXT("获取系统卷标位的标示,每一位代表一个磁盘驱动器:"));
	ShowVolume();
	return 0;
}
<pre name="code" class="cpp">// 本程序用来演示目录操作
//

#include "stdafx.h"
#include "locale.h"
#include "tchar.h"
#include "windows.h"
VOID  UseDirectory()
{
	TCHAR szCreateDirectory[MAX_PATH]=TEXT("C:\\yang");
	CreateDirectory(szCreateDirectory,NULL);
	TCHAR szRemoveDirectory[MAX_PATH]=TEXT("C:\\xue");
	RemoveDirectory(szRemoveDirectory);
	TCHAR szRemoveFileOld[MAX_PATH]=TEXT("C:\\text1.txt");
	TCHAR szRemoveFileNew[MAX_PATH]=TEXT("C:\\text100.txt");
	MoveFile(szRemoveFileOld,szRemoveFileNew);

}
VOID  ShowDirectory()
{/*就是几个简单的函数的调用*/
	TCHAR szWindowsDirectory[MAX_PATH]=TEXT("");
	GetWindowsDirectory(szWindowsDirectory,MAX_PATH);
	_tprintf(TEXT("当前系统的windows目录是:%s\n"),szWindowsDirectory);
	TCHAR szSystemDirectory[MAX_PATH]=TEXT("");
	GetSystemDirectory(szSystemDirectory,MAX_PATH);
	_tprintf(TEXT("当前系统的system目录是:%s\n"),szSystemDirectory);
	TCHAR szTempPath[MAX_PATH]=TEXT("");
	GetTempPath(MAX_PATH,szTempPath);
	_tprintf(TEXT("当前系统的szTempPath目录是:%s\n"),szTempPath);
	TCHAR szCurrentDirectory[MAX_PATH]=TEXT("");
	GetCurrentDirectory(MAX_PATH,szCurrentDirectory);
	_tprintf(TEXT("当前目录是:%s\n"),szCurrentDirectory);
	TCHAR szSetCurrentDirectory[MAX_PATH]=TEXT("C:\\");
	SetCurrentDirectory(szSetCurrentDirectory);
	_tprintf(TEXT("当前设置的目录是:%s\n"),szSetCurrentDirectory);
	GetCurrentDirectory(MAX_PATH,szCurrentDirectory);
	_tprintf(TEXT("设置之后的当前目录是:%s\n"),szCurrentDirectory);
}
int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL,"chs");
	ShowDirectory();
	UseDirectory();
	return 0;
}

// 本程序演示的是文件的各种操作

#include "stdafx.h"
#include "tchar.h"
#include "windows.h"
#include "locale.h"

VOID  Create()
{
	/*
	HANDLE WINAPI CreateFile(
									__in      LPCTSTR lpFileName,
									__in      DWORD dwDesiredAccess,
									__in      DWORD dwShareMode,
									__in_opt  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
									__in      DWORD dwCreationDisposition,
									__in      DWORD dwFlagsAndAttributes,
									__in_opt  HANDLE hTemplateFile
	);
	*/
	TCHAR * szFileName=TEXT("C:\\yang.txt");
	DWORD  dwDesiredAccess=GENERIC_READ|GENERIC_WRITE;
	DWORD dwShareMode=0;//Prevents other processes from opening a file or device if they request delete, read, or write access.
	LPSECURITY_ATTRIBUTES lpSecurityAttributes=NULL;
	DWORD dwCreationDisposition=CREATE_ALWAYS;
	DWORD dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL;
	HANDLE hTemplateFile=NULL;
	HANDLE hFile=CreateFile(szFileName,
							dwDesiredAccess,
							dwShareMode,
							lpSecurityAttributes,
							dwCreationDisposition,
							dwFlagsAndAttributes,
							hTemplateFile);
	CloseHandle(hFile);   
	_tprintf(TEXT("创建文件函数被执行!\n"));
}
VOID  Write()
{
	TCHAR * szFileName=TEXT("C:\\yang.txt");
	DWORD  dwDesiredAccess=GENERIC_WRITE;
	DWORD dwShareMode=0;//Prevents other processes from opening a file or device if they request delete, read, or write access.
	LPSECURITY_ATTRIBUTES lpSecurityAttributes=NULL;
	DWORD dwCreationDisposition=OPEN_EXISTING;
	DWORD dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL;
	HANDLE hTemplateFile=NULL;
	HANDLE hFile=CreateFile(szFileName,
		dwDesiredAccess,
		dwShareMode,
		lpSecurityAttributes,
		dwCreationDisposition,
		dwFlagsAndAttributes,
		hTemplateFile);
	TCHAR  szText[MAX_PATH]=TEXT("这个里面对文件进行了内容的写入!");
	DWORD  nLength=0;
	/*这里如果项目的属性设置成为Unicode编码的话,写入汉字都是乱码,
	前面章节的读入txt中内容的时候也出现了这种情况。原因不明,没有解决,先放在这里一起解决*/
	WriteFile(hFile,szText,_tcslen(szText),&nLength,NULL);
	CloseHandle(hFile); 
	_tprintf(TEXT("文件内容写入函数被执行!\n"));
}
VOID Read()
{
	//打开文件
	TCHAR * szFileName=TEXT("C:\\yang.txt");
	DWORD  dwDesiredAccess=GENERIC_READ;
	DWORD dwShareMode=0;//Prevents other processes from opening a file or device if they request delete, read, or write access.
	LPSECURITY_ATTRIBUTES lpSecurityAttributes=NULL;
	DWORD dwCreationDisposition=OPEN_EXISTING;
	DWORD dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL;
	HANDLE hTemplateFile=NULL;
	HANDLE hFile=CreateFile(szFileName,
	dwDesiredAccess,
	dwShareMode,
	lpSecurityAttributes,
	dwCreationDisposition,
	dwFlagsAndAttributes,
	hTemplateFile);
	//取得文件的大小
	DWORD nHigh_order=0;
	DWORD nLow_order=GetFileSize(hFile,&nHigh_order);
	//分配内存,用来存放读取的文件内容
	TCHAR * szText=(TCHAR *)malloc(nLow_order+1);
	memset(szText,0,nLow_order+1);
	//设置文件的读写位置
	SetFilePointer(hFile,0,NULL,FILE_BEGIN);
	//读文件
	DWORD  nLength=0;
	DWORD  nAlreadyRead=0;
	ReadFile(hFile,szText,nLow_order+1,&nAlreadyRead,NULL);
	_tprintf(TEXT("从文件中读入的内容是:%s\n"),szText);
}

VOID Operator()
{
	TCHAR  szOld[MAX_PATH]=TEXT("C:\\yang.txt");
	TCHAR  szNew[MAX_PATH]=TEXT("C:\\yangnew.txt");
	CopyFile(szOld,szNew,FALSE);
	DeleteFile(TEXT("C:\\yangcopy.txt"));
}

VOID PrintTime(TCHAR * szPath,FILETIME * filetime)
{
	FileTimeToLocalFileTime(filetime,filetime);//将文件时间转换成为本时区的本地时间
	SYSTEMTIME systemtime={0};
	FileTimeToSystemTime(filetime,&systemtime);//文件时间转换成为系统时间
	_tprintf(TEXT("%s:%d-%d-%d %d:%d:%d\n"),szPath,systemtime.wYear,systemtime.wMonth,systemtime.wDay,systemtime.wHour,systemtime.wMinute,systemtime.wSecond);
}


VOID Attribute()
{
	/*
	typedef struct _WIN32_FILE_ATTRIBUTE_DATA {
														DWORD    dwFileAttributes;
														FILETIME ftCreationTime;
														FILETIME ftLastAccessTime;
														FILETIME ftLastWriteTime;
														DWORD    nFileSizeHigh;
														DWORD    nFileSizeLow;
												} WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA;

   typedef struct _FILETIME {
									 DWORD   dwLowDateTime;   // low 32 bits  
									 DWORD   dwHighDateTime;  // high 32 bits 
							} FILETIME, *PFILETIME, *LPFILETIME;
	*/
	TCHAR * szFileName=TEXT("C:\\yang.txt");
	DWORD nAttribute=GetFileAttributes(szFileName);
	_tprintf(TEXT("文件%s的属性十六进制表示是:%08X\n"),szFileName,nAttribute);
	switch(nAttribute)
	{
		case 32://十进制数值是32,十六进制数值是20
			_tprintf(TEXT("文件的属性是:FILE_ATTRIBUTE_ARCHIVE\n"));
		break;
	}
	WIN32_FILE_ATTRIBUTE_DATA data={0};
	GetFileAttributesEx(szFileName,GetFileExInfoStandard,&data);
	_tprintf(TEXT("dwFileAttributes=%d\n"),data.dwFileAttributes);
	_tprintf(TEXT("nFileSizeHigh=%d\n"),data.nFileSizeHigh);
	_tprintf(TEXT("nFileSizeLow=%d\n"),data.nFileSizeLow);
	_tprintf(TEXT("文件的创建时间是:\n"));
	 PrintTime(szFileName,&data.ftCreationTime);
	 _tprintf(TEXT("文件的最后访问时间是:\n"));
	 PrintTime(szFileName,&data.ftLastAccessTime);
	 _tprintf(TEXT("文件的最后写入访问时间是:\n"));
	 PrintTime(szFileName,&data.ftLastWriteTime);
}
int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL,"chs");
	Create();
	Write();
	Read();
	Operator();
	Attribute();
	return 0;
}

// 本程序用来演示目录查询
//
#include "tchar.h"
#include "stdafx.h"
#include "windows.h"
#include "locale.h"

VOID Find(TCHAR * szPath,TCHAR * szType)
{
	TCHAR szFind[MAX_PATH]={0};
	_stprintf(szFind,TEXT("%s%s"),szPath,szType);
	WIN32_FIND_DATA    find={0};
	HANDLE hFirstFile=FindFirstFile(szFind,&find);
	BOOL nResult=TRUE;
	while(nResult==TRUE)
	{
		if (find.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)//如果文件是一个目录
		{
			_tprintf(TEXT("目录:%s\n"),find.cFileName);
			if (find.cFileName[0]!='.')
			{
				//
				TCHAR szNextPath[MAX_PATH]={0};
				_stprintf(szNextPath,TEXT("%s%s\\"),szPath,find.cFileName);
				Find(szNextPath,szType);
			}

		}
		else//文件不是一个目录
		{
			_tprintf(TEXT("文件%s\n"),find.cFileName);
		}
		nResult=FindNextFile(hFirstFile,&find);
	}


}
int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL,"zhi");
	Find(TEXT("c:\\"),TEXT("*.*"));
	return 0;
}


 




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值