本文是截图: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;
}