GetLogicalDrives:查看存在的盘符
GetLogicalDriveStrings:输出存在的盘符
GetLogicalDriveStrings:判断盘符类型
void ShowVolumn()
{
DWORD n = GetLogicalDrives();//查看二进制位 有数值代表存在盘符
printf("%d \n",n);//此处可添加10进制转2进制函数
CHAR szText[260] = { 0 };
GetLogicalDriveStrings(260, szText);
CHAR * pszText = szText;
while( 0 != pszText[0] )
{
UINT nType = GetDriveType(pszText);
switch(nType)
{
case DRIVE_CDROM:
printf(" %s 是光驱!\n",pszText);
break;
case DRIVE_FIXED:
printf("%s 是硬盘!\n",pszText);
break;
}
pszText = pszText+1+strlen((pszText));
}
}
/************************************/
目录操作
void ShowDir()
{
CHAR szDir[MAX_PATH] = { 0 };
GetWindowsDirectory(szDir, MAX_PATH );//获取windows目录路径
printf("%s \n",szDir);
memset(szDir, 0, MAX_PATH);
GetSystemDirectory(szDir, MAX_PATH );//获取system目录路径
printf("%s \n",szDir);
memset(szDir, 0, MAX_PATH);
GetTempPath(MAX_PATH ,szDir);//获取temp目录路径
printf("%s \n",szDir);
memset(szDir, 0, MAX_PATH);
GetCurrentDirectory(MAX_PATH ,szDir);//获取当前工作目录路径(随可执行文件路径改变而改变)
printf("%s \n",szDir);
}
void Usedirectory()
{
if (CreateDirectory("E:\\test",NULL))//创建空目录
{
printf("CreateDirectory E:\\test Success \n");
}
if (MoveFile("E:\\test","e:\\txxxx"))//修改目录名称
{
printf("MoveFile E:\\test to 'txxxx' Success \n");
}
if (RemoveDirectory("E:\\test"))//要删除的目录必须为空,不能包含其它文件
{
printf("RemoveDirectory E:\\test Success \n");
}
}
三 文件
1 文件的创建或打开
HANDLE CreateFile(
LPCTSTR lpFileName,//文件路径和名称
DWORD dwDesiredAccess, //访问方式
DWORD dwShareMode,//共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
//安全属性
DWORD dwCreationDisposition, //创建方式
DWORD dwFlagsAndAttributes,//文件属性
HANDLE hTemplateFile );//拷贝的文件句柄
void File_Create()
{
HANDLE hFile = CreateFile("E:\\TestFile.txt", GENERIC_READ|GENERIC_WRITE, 0 ,
NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );//创建可读写的隐藏文件
CloseHandle(hFile);
}
2 文件的关闭
BOOL CloseHandle(
HANDLE hObject );//要关闭的句柄
3 文件的数据写入
BOOL WriteFile(
HANDLE hFile, //文件句柄
LPCVOID lpBuffer, //写入数据的BUFF的地址
DWORD nNumberOfBytesToWrite,
//写入数据的BUFF的长度
LPDWORD lpNumberOfBytesWritten,
//返回被写入数据的长度
LPOVERLAPPED lpOverlapped);//默认NULL
void File_Write() //写入
{
HANDLE hFile = CreateFile("E:\\1.txt", GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// printf("%x \n",hFile);
CHAR szBuf[] = "Hello Kitty";
DWORD nWrite = 0;
if( WriteFile(hFile, szBuf, strlen(szBuf), &nWrite,NULL) )
{
printf("write success \n");
}
CloseHandle(hFile);
}
4 文件的数据读取
BOOL ReadFile(
HANDLE hFile, // 文件句柄
LPVOID lpBuffer, //读入数据的BUFF的地址
DWORD nNumberOfBytesToRead,
//读入数据的BUFF的长度
LPDWORD lpNumberOfBytesRead,
//返回被读入数据的长度
LPOVERLAPPED lpOverlapped );//默认NULL
void File_Read() //读出
{
HANDLE hFile = CreateFile("E:\\1.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
printf("%x \n",hFile);
CHAR szBuf[260] = { 0 };
DWORD nRead = 0;
if( ReadFile(hFile, szBuf, 260, &nRead,NULL) )
{
printf("ReadOut: %s \n",szBuf);
}
CloseHandle(hFile);
}
5 获取文件长度
DWORD GetFileSize(
HANDLE hFile,//文件的句柄
LPDWORD lpFileSizeHigh );//高32位
返回值是低32位
文件的长度64位 = (低32位, 高32位 )
void File_Length()
{
HANDLE hFile = CreateFile("E:\\1.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD nHigh = 0;
DWORD nLow = GetFileSize(hFile, &nHigh);
printf("length:%d \n",nLow);
CloseHandle(hFile);
}
6 设置文件指针
DWORD SetFilePointer(
HANDLE hFile, //文件的句柄
LONG lDistanceToMove, //偏移量,低32位
PLONG lpDistanceToMoveHigh, //偏移量,高
DWORD dwMoveMethod ); //相对位置
返回值是返回偏移量的低32
void File_Read() //读出
{
HANDLE hFile = CreateFile("E:\\1.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
printf("%x \n",hFile);
CHAR szBuf[260] = { 0 };
DWORD nRead = 0;
SetFilePointer(hFile,1, NULL, FILE_BEGIN);//文件指针向前移动一位
if( ReadFile(hFile, szBuf, 260, &nRead,NULL) )
{
printf("ReadOut: %s \n",szBuf);//输出ello Kitty
}
CloseHandle(hFile);
}
7 拷贝文件
BOOL CopyFile(
LPCTSTR lpExistingFileName,//源
LPCTSTR lpNewFileName, //目的
BOOL bFailIfExists );
//是否覆盖目的同名文件,FALSE为覆盖
void File_Copy()
{
if ( CopyFile("E:\\TestFile2.txt","d:\\2.txt",FALSE))
{
printf("copy file sucess \n");
}
}
8 删除文件
BOOL DeleteFile(
LPCTSTR lpFileName );//要删除的文件
9 文件的属性
9.1 GetFileAttributes
DWORD GetFileAttributes(
LPCTSTR lpFileName );文件名
返回值是获取到的文件的属性标示
9.2 GetFileAttributesEx
BOOL GetFileAttributesEx(
LPCTSTR lpFileName,//文件名
GET_FILEEX_INFO_LEVELS fInfoLevelId,
//获取文件属性信息的级别
LPVOID lpFileInformation
//对应级别的数据结构的地址
);
9.3 设置文件属性
BOOL SetFileAttributes(
LPCTSTR lpFileName, //文件名 pointer to filename
DWORD dwFileAttributes ); //属性标示
四 文件的查找
1 查找文件
HANDLE FindFirstFile(
LPCTSTR lpFileName,//查找的路径
LPWIN32_FIND_DATA lpFindFileData //返回查找信息
);
返回值 - 查找句柄
2 获取查找到的结果
BOOL FindNextFile(
HANDLE hFindFile, //查找句柄
LPWIN32_FIND_DATA lpFindFileData
//返回查找信息
);
返回值 - 成功是TRUE
3 关闭查找
BOOL FindClose(
HANDLE hFindFile //查找句柄
);
void f_Find(LPSTR pszPath)
{
WIN32_FIND_DATA FIND = { 0 };
HANDLE hFile = FindFirstFile(pszPath, &FIND);//开始查找
//显式查找结果
while ( FindNextFile(hFile, &FIND) )
{
printf("%s \n",FIND.cFileName);
}
FindClose(hFile);
}
4 关于查找结果排序,需要自己增加排序
功能。
//查找指定目录下所有文件
void f_Find(LPSTR pszPath, LPSTR pType)
{
CHAR FindFile[MAX_PATH] = { 0 };
sprintf(FindFile,"%s%s",pszPath,pType);
WIN32_FIND_DATA FIND = { 0 };
HANDLE hFile = FindFirstFile(FindFile, &FIND);//开始查找
//显式查找结果
BOOL bRet = TRUE;
while ( bRet )
{
if ( FIND.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (FIND.cFileName[0] != '.')
{
// printf("- 目录 [%s] \n",FIND.cFileName);
//构建下一层目录
CHAR szNextPath[MAX_PATH] = { 0 };
sprintf(szNextPath,"%s%s\\",pszPath,FIND.cFileName);
printf("%s \n",szNextPath);
f_Find(szNextPath , pType);//递归找到的目录
}
}
else
{
printf("+ %s \n",FIND.cFileName);
}
bRet = FindNextFile(hFile, &FIND);
}
FindClose(hFile);
}