Win32磁盘、目录、文件api(备忘)

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);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值