《编程实现 文件系统.ppt》由会员分享,可在线阅读,更多相关《编程实现 文件系统.ppt(113页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、For:分类信息From:新闻WindowsWindows系统编程实用教程系统编程实用教程系统编程实用教程系统编程实用教程授课教师:授课教师:职务:职务:For:分类信息From:新闻第第5章章 文件系统编程文件系统编程课程描述课程描述课程描述课程描述文件系统是操作系统文件系统是操作系统文件系统是操作系统文件系统是操作系统的重要组成部分,它的重要组成部分,它的重要组成部分,它的重要组成部分,它用于明确磁盘或分区用于明确磁盘或分区用于明确磁盘或分区用于明确磁盘或分区上文件的组织形式和上文件的组织形式和上文件的组织形式和上文件的组织形式和保存方法。在应用程保存方法。在应用程保存方法。在应用程保存方
2、法。在应用程序中,文件是保存数序中,文件是保存数序中,文件是保存数序中,文件是保存数据的重要途径之一。据的重要途径之一。据的重要途径之一。据的重要途径之一。经常需要创建文件保经常需要创建文件保经常需要创建文件保经常需要创建文件保存数据,或从文件中存数据,或从文件中存数据,或从文件中存数据,或从文件中读取数据。为了更方读取数据。为了更方读取数据。为了更方读取数据。为了更方便地管理文件,有时便地管理文件,有时便地管理文件,有时便地管理文件,有时还要创建目录。本章还要创建目录。本章还要创建目录。本章还要创建目录。本章将介绍将介绍将介绍将介绍WindowsWindowsWindowsWindows文件
3、系文件系文件系文件系统编程的方法。统编程的方法。统编程的方法。统编程的方法。For:分类信息From:新闻本章知识点本章知识点5.1 5.1 磁盘驱动器编程磁盘驱动器编程5.2 5.2 目录编程目录编程5.3 5.3 文件编程文件编程For:分类信息From:新闻5.1 磁盘驱动器编程磁盘驱动器编程5.1.1 5.1.1 获取当前系统中的逻辑磁盘获取当前系统中的逻辑磁盘驱动器驱动器5.1.2 5.1.2 获取磁盘获取磁盘驱动器驱动器的信息的信息For:分类信息From:新闻5.1.1 获取当前系统中的逻辑磁盘驱动器获取当前系统中的逻辑磁盘驱动器pGetLogicalDriveStrings()
4、函数用于获取当前系统中的逻辑磁盘驱函数用于获取当前系统中的逻辑磁盘驱动器,函数原型如下:动器,函数原型如下:DWORDWINAPIGetLogicalDriveStrings(_inDWORDnBufferLength,_outLPTSTRlpBuffer);参数说明如下:pnBufferLength,参数,参数lpBuffer所指向的缓冲区的大小。所指向的缓冲区的大小。plpBuffer,用于保存返回的逻辑磁盘驱动器列表。,用于保存返回的逻辑磁盘驱动器列表。lpBuffer指向一指向一系列以系列以null结束的字符串,每个字符串表示一个磁盘驱动器对应的盘结束的字符串,每个字符串表示一个磁盘驱
5、动器对应的盘符根目录。格式如下;符根目录。格式如下;C:nullD:nullX:nullFor:分类信息From:新闻【例【例5.1】设计一个选择逻辑磁盘驱动器的对话框。设计一个选择逻辑磁盘驱动器的对话框。创建一个基于对话框的创建一个基于对话框的MFC项目项目SelectDiskDriver。默认创建的对话框的。默认创建的对话框的ID是是IDD_SELECTDISKDRIVER_DIALOG,对应的类为,对应的类为CSelectDiskDriverDlg。对话框。对话框IDD_SELECTDISKDRIVER_DIALOG包含包含一个一个Combo Box控件控件IDC_COMBO_DRIVE
6、,对话框的设计布局如图,对话框的设计布局如图5.1所示。所示。For:分类信息From:新闻CSelectDiskDriverDlg:OnInitDialog()函数函数/TODO:/TODO:在此添加额外的初始化代码在此添加额外的初始化代码/第第1 1次调用次调用GetLogicalDriveStrings()GetLogicalDriveStrings(),获取返回缓冲区的大小,获取返回缓冲区的大小size_t alldrive=:GetLogicalDriveStrings(0,NULL);size_t alldrive=:GetLogicalDriveStrings(0,NULL);_
7、TCHAR*driverstr;_TCHAR*driverstr;driverstr=new _TCHARalldrive+sizeof(_T();driverstr=new _TCHARalldrive+sizeof(_T();/printf(AllDrivesize is:%drn,alldrive);/printf(AllDrivesize is:%drn,alldrive);/第次调用第次调用GetLogicalDriveStrings()GetLogicalDriveStrings(),获取实际的逻辑磁盘驱动器字符串,获取实际的逻辑磁盘驱动器字符串 size_t twosize=Ge
8、tLogicalDriveStrings(alldrive,driverstr);size_t twosize=GetLogicalDriveStrings(alldrive,driverstr);CString DriveLetter;CString DriveLetter;/由于由于driverstrdriverstr内保存的数据是内保存的数据是A:nullB:nullC:nullA:nullB:nullC:null,每,每4 4个字符截取一个逻辑磁盘驱动器字符串。个字符截取一个逻辑磁盘驱动器字符串。for(int i=0;ialldrive/4;i+)for(int i=0;iMessa
9、geBox(strDrive.GetBuffer();this-MessageBox(strDrive.GetBuffer();OnOK();OnOK();For:分类信息From:新闻5.1.2 获取磁盘获取磁盘驱动器驱动器的信息的信息1 1获取磁盘驱动器的类型获取磁盘驱动器的类型2 2获取磁盘的空闲空间获取磁盘的空闲空间For:分类信息From:新闻1获取磁盘驱动器的类型获取磁盘驱动器的类型pGetDriveType()GetDriveType()函数可以获取磁盘驱动函数可以获取磁盘驱动器的类型,函数原型如下;器的类型,函数原型如下;UINT WINAPI GetDriveType(UIN
10、T WINAPI GetDriveType(_in LPCTSTR _in LPCTSTR lpRootPathNamelpRootPathName/磁盘驱动器磁盘驱动器的根路径,格式为的根路径,格式为“X:X:”););For:分类信息From:新闻GetDriveType()函数函数的返回值的返回值代表磁盘驱动器类型的常量说明DRIVE_UNKNOWN未知DRIVE_NO_ROOT_DIR参数lpRootPathName指定的根路径无效DRIVE_REMOVABLE 可移动磁盘DRIVE_FIXED固定磁盘(硬盘)DRIVE_REMOTE网络磁盘DRIVE_CDROMCD-ROM驱动器DR
11、IVE_RAMDISKRAM磁盘驱动器For:分类信息From:新闻【例【例5.2】p在例在例5.15.1的基础上增加功能,当用户选择磁盘驱动器时获取并显示的基础上增加功能,当用户选择磁盘驱动器时获取并显示其类型。其类型。p首先在对话框首先在对话框IDD_SELECTDISKDRIVER_DIALOGIDD_SELECTDISKDRIVER_DIALOG中添加一个中添加一个Static Static TextText控件,用于先磁盘驱动器的类型。然后为其添加变量控件,用于先磁盘驱动器的类型。然后为其添加变量m_DriveTypem_DriveType,定义代码如下:,定义代码如下:CStrin
12、g m_DriveType;CString m_DriveType;For:分类信息From:新闻OnCbnSelchangeComboDrive()void CSelectDiskDriverDlg:OnCbnSelchangeComboDrive()void CSelectDiskDriverDlg:OnCbnSelchangeComboDrive()/获取选择的驱动器根路径获取选择的驱动器根路径CString strDrive;CString strDrive;m_drive.GetWindowTextW(strDrive);m_drive.GetWindowTextW(strDrive
13、);/获取磁盘的类型获取磁盘的类型int retCode=:GetDriveType(strDrive.GetBuffer();int retCode=:GetDriveType(strDrive.GetBuffer();switch(retCode)switch(retCode)case DRIVE_UNKNOWN:case DRIVE_UNKNOWN:m_DriveType=m_DriveType=驱动器类型:未知驱动器类型:未知;break;break;case DRIVE_NO_ROOT_DIR:case DRIVE_NO_ROOT_DIR:m_DriveType=m_DriveTyp
14、e=驱动器类型:驱动器根路径错误驱动器类型:驱动器根路径错误;break;break;case DRIVE_REMOVABLE:case DRIVE_REMOVABLE:m_DriveType=m_DriveType=驱动器类型:可移动磁盘驱动器驱动器类型:可移动磁盘驱动器;break;break;For:分类信息From:新闻OnCbnSelchangeComboDrive()case DRIVE_FIXED:case DRIVE_FIXED:m_DriveType=m_DriveType=驱动器类型:固定磁盘驱动器驱动器类型:固定磁盘驱动器;break;break;case DRIVE_R
15、EMOTE:case DRIVE_REMOTE:m_DriveType=m_DriveType=驱动器类型:网络磁盘驱动器驱动器类型:网络磁盘驱动器;break;break;case DRIVE_CDROM:case DRIVE_CDROM:m_DriveType=m_DriveType=驱动器类型:驱动器类型:CD-ROM;CD-ROM;break;break;case DRIVE_RAMDISK:case DRIVE_RAMDISK:m_DriveType=m_DriveType=驱动器类型:驱动器类型:RAM;RAM;break;break;default:default:m_Drive
16、Type=m_DriveType=驱动器类型:未知驱动器类型:未知;break;break;UpdateData(FALSE);UpdateData(FALSE);For:分类信息From:新闻【例【例5.2】的运行界面】的运行界面For:分类信息From:新闻2获取磁盘的空间获取磁盘的空间p调用调用GetDiskFreeSpaceEx()GetDiskFreeSpaceEx()函数可以获取磁盘卷的空间信息,函函数可以获取磁盘卷的空间信息,函数原型如下:数原型如下:BOOL WINAPI GetDiskFreeSpaceEx(BOOL WINAPI GetDiskFreeSpaceEx(_in
17、 LPCTSTR lpDirectoryName,_in LPCTSTR lpDirectoryName,/磁盘卷的根目录字符串磁盘卷的根目录字符串 _out PULARGE_INTEGER lpFreeBytesAvailable,/_out PULARGE_INTEGER lpFreeBytesAvailable,/返回对于函返回对于函数调用者可用的空闲空间数调用者可用的空闲空间 _out PULARGE_INTEGER lpTotalNumberOfBytes,/_out PULARGE_INTEGER lpTotalNumberOfBytes,/返回磁盘的返回磁盘的总空间总空间 _ou
18、t PULARGE_INTEGER lpTotalNumberOfFreeBytes _out PULARGE_INTEGER lpTotalNumberOfFreeBytes/返回返回磁盘的空闲空间磁盘的空闲空间););p以上空间数据的单位均为字节(以上空间数据的单位均为字节(B B)。如果函数调用成功,则返)。如果函数调用成功,则返回非回非0 0值;否则返回值;否则返回0 0。For:分类信息From:新闻PULARGE_INTEGER联合体联合体pPULARGE_INTEGERPULARGE_INTEGER是用于存储是用于存储6464位整数的联合体,定义代码如下:位整数的联合体,定义代码
19、如下:typedef union _ULARGE_INTEGER typedef union _ULARGE_INTEGER struct struct DWORD LowPart;DWORD LowPart;DWORD HighPart;DWORD HighPart;struct struct DWORD LowPart;DWORD LowPart;DWORD HighPart;DWORD HighPart;u;u;ULONGLONG QuadPart;ULONGLONG QuadPart;ULARGE_INTEGER;ULARGE_INTEGER;pULONGLONGULONGLONG是无
20、符号是无符号6464位整数类型,定义代码如下:位整数类型,定义代码如下:typedef unsigned _int64 ULONGLONG;typedef unsigned _int64 ULONGLONG;For:分类信息From:新闻【例【例5.3】p在例在例5.25.2的基础上增加功能,当用户选择磁盘驱动器时获取并显示的基础上增加功能,当用户选择磁盘驱动器时获取并显示其空间信息。其空间信息。p首先在对话框首先在对话框IDD_SELECTDISKDRIVER_DIALOGIDD_SELECTDISKDRIVER_DIALOG中添加中添加2 2个个Static Static TextText
21、控件,用于显示磁盘驱动器的总空间(控件,用于显示磁盘驱动器的总空间(IDID为为IDC_TOTALSPACEIDC_TOTALSPACE,对应的变量为,对应的变量为m_TotalSpacem_TotalSpace)和空闲空间()和空闲空间(IDID为为IDC_FREESPACEIDC_FREESPACE,对应的变量为,对应的变量为m_FreeSpacem_FreeSpace)。变量的定义代码如下:)。变量的定义代码如下:CString m_TotalSpace;CString m_TotalSpace;CString m_FreeSpace;CString m_FreeSpace;For:分类
22、信息From:新闻OnCbnSelchangeComboDrive()void CSelectDiskDriverDlg:OnCbnSelchangeComboDrive()void CSelectDiskDriverDlg:OnCbnSelchangeComboDrive()ULARGE_INTEGER FreeAv,TotalBytes,FreeBytes;ULARGE_INTEGER FreeAv,TotalBytes,FreeBytes;if(GetDiskFreeSpaceEx(strDrive.GetBuffer(),&FreeAv,&TotalBytes,&FreeBytes)i
23、f(GetDiskFreeSpaceEx(strDrive.GetBuffer(),&FreeAv,&TotalBytes,&FreeBytes)/格式化信息,并显示出来格式化信息,并显示出来 /CString strTotalBytes,strFreeBytes;/CString strTotalBytes,strFreeBytes;/strTotalBytes.Format(%u /strTotalBytes.Format(%u字节字节,);,);/strFreeBytes.Format(%u /strFreeBytes.Format(%u字节字节,FreeBytes.QuadPart);
24、,FreeBytes.QuadPart);m_TotalSpace.Format(m_TotalSpace.Format(总空间:总空间:%s,FormatSize(TotalBytes.QuadPart);%s,FormatSize(TotalBytes.QuadPart);m_FreeSpace.Format(m_FreeSpace.Format(剩余空间:剩余空间:%s,FormatSize(FreeBytes.QuadPart);%s,FormatSize(FreeBytes.QuadPart);else else m_TotalSpace=m_TotalSpace=总空间:总空间:;
25、m_FreeSpace=m_FreeSpace=剩余空间:剩余空间:;UpdateData(FALSE);UpdateData(FALSE);For:分类信息From:新闻FormatSize()函数函数/返回有单位的空间大小字符串返回有单位的空间大小字符串CString CSelectDiskDriverDlg:FormatSize(ULONGLONG size)CString CSelectDiskDriverDlg:FormatSize(ULONGLONG size)CString strSize;CString strSize;if(size 1024)if(size 1024)if(
26、size 1024*1024)if(size 1024*1024)strSize.Format(%d MB,size/1024/1024);strSize.Format(%d MB,size/1024/1024);elseelse strSize.Format(%d KB,size/1024);strSize.Format(%d KB,size/1024);elseelse strSize.Format(%d B,size);strSize.Format(%d B,size);return strSize;return strSize;For:分类信息From:新闻例例5.3】的运行结果】的运
27、行结果For:分类信息From:新闻5.2 目录编程目录编程5.2.1 5.2.1 选择目录的对话框选择目录的对话框5.2.2 5.2.2 创建目录创建目录5.2.2 5.2.2 删除目录删除目录5.2.3 5.2.3 判断目录是否存在判断目录是否存在For:分类信息From:新闻5.2.1 选择目录的对话框选择目录的对话框p调用调用SHBrowseForFolder()SHBrowseForFolder()函数可以显示一个函数可以显示一个选择目录的对话框,函数原型如下:选择目录的对话框,函数原型如下:PIDLIST_ABSOLUTESHBrowseForFolder(PIDLIST_ABSO
28、LUTESHBrowseForFolder(LPBROWSEINFOlpbi LPBROWSEINFOlpbi););For:分类信息From:新闻BROWSEINFO结构体结构体typedef struct _browseinfotypedef struct _browseinfo HWNDhwndOwner;HWNDhwndOwner;PCIDLIST_ABSOLUTEpidlRoot;PCIDLIST_ABSOLUTEpidlRoot;LPTSTRpszDisplayName;LPTSTRpszDisplayName;LPCTSTRlpszTitle;LPCTSTRlpszTitle;U
29、INTulFlags;UINTulFlags;BFFCALLBACKlpfn;BFFCALLBACKlpfn;LPARAMlParam;LPARAMlParam;intiImage;intiImage;BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;For:分类信息From:新闻参数说明参数说明phwndOwnerhwndOwner,指定选择目录对话框的父窗口句柄。,指定选择目录对话框的父窗口句柄。ppidlRootpidlRoot,用于指定浏览时对话框中显示的根目录。,用于指定浏览时对话框
30、中显示的根目录。ppszDisplayNamepszDisplayName,用户选择的目录。,用户选择的目录。plpszTitlelpszTitle,指定选择目录对话框的标题。,指定选择目录对话框的标题。pulFlagsulFlags,指定选择目录对话框的选项,其取值如表,指定选择目录对话框的选项,其取值如表5.25.2所示。所示。plpfnlpfn,指定一个用户定义的回调函数地址,当事件发生,指定一个用户定义的回调函数地址,当事件发生时,对话框会调用该函数。时,对话框会调用该函数。plParamlParam,指定传递给回调函数的参数。,指定传递给回调函数的参数。piImageiImage,用
31、于接收选择目录的图像,指定系统图像列表,用于接收选择目录的图像,指定系统图像列表的索引。的索引。For:分类信息From:新闻参数参数ulFlags的取值的取值参数ulFlags的取值说 明BIF_BROWSEFORCOMPUTER只返回计算机名。如果用户没有选择计算机,则“确定”按钮被置灰BIF_BROWSEFORPRINTER只允许选择打印机。如果用户没有选择打印机,则“确定”按钮被置灰BIF_BROWSEINCLUDEFILES对话框中将显示目录中包含的文件BIF_BROWSEINCLUDEURLS在 对 话 框 中 显 示 地 址 栏。必 须 同 时 使 用 BIF_USENEWUI
32、和 BIF_BROWSEINCLUDEFILES选项BIF_DONTGOBELOWDOMAIN在对话框中不显示域下面的网络文件夹BIF_EDITBOX在对话框中显示一个编辑框控件,用户可以输入选择项目的名字BIF_NEWDIALOGSTYLE使用一种新的用户界面的对话框BIF_NONEWFOLDERBUTTON在对话框中包含一个“新建文件夹”按钮BIF_NOTRANSLATETARGET如果用户选择一个快捷方式,则返回快捷方式本身,而不是它指向的目标BIF_RETURNFSANCESTORS返回文件系统的一个节点。仅仅当选中的是有意义的节点时,“确定”按钮才有效BIF_RETURNONLYFS
33、DIRS只返回文件系统目录。如果用户选择的项目不是文件系统目录,则“确定”按钮被置灰BIF_SHAREABLE对话框中可以显示远程系统上的共享资源BIF_STATUSTEXT在对话框中显示状态栏BIF_UAHINT与BIF_NEWDIALOGSTYLE选项一起使用,在对话框中显示使用提示BIF_USENEWUI使用带编辑框的新界面BIF_VALIDATE如 果 用 户 在 编 辑 框 中 输 入 无 效 的 名 字,则 对 话 框 会 使 用BFFM_VALIDATEFAILED消息来调用应用程序的BrowseCallbackProc()函数For:分类信息From:新闻回调函数回调函数int
34、CALLBACKBrowseCallbackProc(intCALLBACKBrowseCallbackProc(HWND HWNDhwndhwnd,/选择目录对话框的窗口句柄选择目录对话框的窗口句柄 UINT UINTuMsguMsg,/指定当选择目录对话框发指定当选择目录对话框发生次事件时,调用回调函数生次事件时,调用回调函数 LPARAM LPARAMlParamlParam,/参数值,根据参数值,根据uMsguMsg的取值,的取值,拥有不同的含义拥有不同的含义 LPARAM LPARAMlpDatalpData/BROWSEINFOBROWSEINFO结构体中结构体中指定的指定的lPa
35、ramlParam参数参数););For:分类信息From:新闻【例【例5.4】演示使用演示使用SHBrowseForFolder()SHBrowseForFolder()函数选择目录的方法,如图函数选择目录的方法,如图5.55.5所示。所示。For:分类信息From:新闻【例【例5.4】p创建一个基于对话框的创建一个基于对话框的MFCMFC项目项目SelectFolderSelectFolder,主对话框对应的类,主对话框对应的类是是CSelectFolderDlgCSelectFolderDlg。在对话框中添加一个编辑框控件。在对话框中添加一个编辑框控件IDC_EDIT1IDC_EDIT1
36、,用于保存和显示用户选择的目录,并为其添加变量,用于保存和显示用户选择的目录,并为其添加变量m_pathm_path,定,定义代码如下:义代码如下:CString m_path;CString m_path;For:分类信息From:新闻单击单击“浏览浏览”按钮对应的代码按钮对应的代码void CSelectFolderDlg:OnBnClickedButtonBrowse()void CSelectFolderDlg:OnBnClickedButtonBrowse()UpdateData(TRUE);/UpdateData(TRUE);/获取当前目录,用作初始目录获取当前目录,用作初始目录B
37、ROWSEINFO bi;BROWSEINFO bi;ZeroMemory(&bi,sizeof(BROWSEINFO);ZeroMemory(&bi,sizeof(BROWSEINFO);LPMALLOC pMalloc;LPMALLOC pMalloc;/为调用回调函数准备参数为调用回调函数准备参数bi.lParam=(LPARAM)m_path.GetBuffer();bi.lParam=(LPARAM)m_path.GetBuffer();bi.hwndOwner=NULL;bi.hwndOwner=NULL;/指定回调函数指定回调函数bi.lpfn=BrowserCallbackPr
38、oc;bi.lpfn=BrowserCallbackProc;LPITEMIDLIST pidl=SHBrowseForFolder(&bi);LPITEMIDLIST pidl=SHBrowseForFolder(&bi);TCHAR*path=new TCHARMAX_PATH;TCHAR*path=new TCHARMAX_PATH;if(pidl!=NULL)if(pidl!=NULL)SHGetPathFromIDList(pidl,path);SHGetPathFromIDList(pidl,path);m_path=path;m_path=path;if(SUCCEEDED(SH
39、GetMalloc(&pMalloc)if(SUCCEEDED(SHGetMalloc(&pMalloc)pMalloc-Free(pidl);pMalloc-Free(pidl);pMalloc-Release();pMalloc-Release();delete path;delete path;UpdateData(FALSE);UpdateData(FALSE);For:分类信息From:新闻SHGetPathFromIDList()函数函数BOOLSHGetPathFromIDList(PCIDLIST_ABSOLUTEpidl,/SHBrowseForFolder()函数的返回值L
40、PTSTRpszPath/提取的目录字符串);p如果函数执行成功,则返回如果函数执行成功,则返回TRUE;否则返回;否则返回FALSE。For:分类信息From:新闻回调函数回调函数BrowserCallbackProcp/回调函数,用于指定初始目录回调函数,用于指定初始目录pint CALLBACK BrowserCallbackProc(HWND hWnd,UINT uMsg,LPARAM lParam,LPARAM int CALLBACK BrowserCallbackProc(HWND hWnd,UINT uMsg,LPARAM lParam,LPARAM lpData)lpData
41、)p p CWnd cw;CWnd cw;p switch(uMsg)switch(uMsg)p p case BFFM_INITIALIZED:/case BFFM_INITIALIZED:/该消息表示对话框已经为调用作好准备该消息表示对话框已经为调用作好准备p/向向hWndhWnd窗口发送窗口发送BFFM_SETSELECTIONBFFM_SETSELECTION消息,消息,p/BFFM_SETSELECTION/BFFM_SETSELECTION消息要求对话框根据用户的指定显示选择的目录。消息要求对话框根据用户的指定显示选择的目录。p/lpData/lpData为初始目录为初始目录p :
42、SendMessage(hWnd,BFFM_SETSELECTION,1,lpData);:SendMessage(hWnd,BFFM_SETSELECTION,1,lpData);p cw.Attach(hWnd);cw.Attach(hWnd);p cw.CenterWindow();/cw.CenterWindow();/将窗口置中将窗口置中p cw.Detach();cw.Detach();p break;break;p default:default:p break;break;p p return 0;return 0;p For:分类信息From:新闻5.2.2 创建目录创建目录
43、p调用调用CreateDirectory()CreateDirectory()函数可以创建目录,函数的原函数可以创建目录,函数的原型如下:型如下:BOOL WINAPI CreateDirectory(BOOL WINAPI CreateDirectory(_in LPCTSTR lpPathName,_in LPCTSTR lpPathName,_in LPSECURITY_ATTRIBUTES _in LPSECURITY_ATTRIBUTES lpSecurityAttributeslpSecurityAttributes););p如果函数执行成功,则返回如果函数执行成功,则返回TRUE
44、TRUE;否则返回;否则返回FALSEFALSE。For:分类信息From:新闻SECURITY_ATTRIBUTES结构体结构体typedef struct _SECURITY_ATTRIBUTES typedef struct _SECURITY_ATTRIBUTES DWORD nLength;DWORD nLength;/结构体的大小,结构体的大小,单位为字节单位为字节 LPVOID lpSecurityDescriptor;LPVOID lpSecurityDescriptor;/指向用于个管理指向用于个管理共享的安全描述符共享的安全描述符 BOOL bInheritHandle;B
45、OOL bInheritHandle;/指返回的句柄是否可以指返回的句柄是否可以被继承被继承 SECURITY_ATTRIBUTES,SECURITY_ATTRIBUTES,*PSECURITY_ATTRIBUTES,*PSECURITY_ATTRIBUTES,*LPSECURITY_ATTRIBUTES;*LPSECURITY_ATTRIBUTES;For:分类信息From:新闻【例【例5.5】p编写程序,在编写程序,在C:C:目录下创建目录下创建MyAppMyApp目录,代码如下:目录,代码如下:#include stdafx.h#include stdafx.h#include#incl
46、ude#include#include int _tmain(int argc,_TCHAR*argv)int _tmain(int argc,_TCHAR*argv)char szDirPath=c:MyApp;char szDirPath=c:MyApp;if(!CreateDirectory(szDirPath,NULL)if(!CreateDirectory(szDirPath,NULL)printf(Could not create new directory.n);printf(Could not create new directory.n);else else printf(c
47、reate new directory success.n);printf(create new directory success.n);system(pause);system(pause);return 0;return 0;For:分类信息From:新闻5.2.2 删除目录删除目录p调用调用RemoveDirectory()RemoveDirectory()函数可以删除一个空目录,函数的原型函数可以删除一个空目录,函数的原型如下:如下:BOOL WINAPI RemoveDirectory(BOOL WINAPI RemoveDirectory(_in LPCTSTR _in LPCT
48、STR lpPathNamelpPathName/要删除的空目录,调用要删除的空目录,调用进程必须对此目录有删除权限进程必须对此目录有删除权限););p如果函数执行成功,则返回如果函数执行成功,则返回TRUETRUE;否则返回;否则返回FALSEFALSE。For:分类信息From:新闻【例【例5.6】p编写程序,删除目录编写程序,删除目录C:MyAppC:MyApp,代码如下:,代码如下:#include stdafx.h#include stdafx.h#include#include#include#include int _tmain(int argc,_TCHAR*argv)int
49、_tmain(int argc,_TCHAR*argv)char szDirPath=c:MyApp;char szDirPath=c:MyApp;if(!RemoveDirectory(szDirPath,NULL)if(!RemoveDirectory(szDirPath,NULL)printf(Could not delete the directory.n);printf(Could not delete the directory.n);else else printf(delete the directory success.n);printf(delete the directo
50、ry success.n);system(pause);system(pause);return 0;return 0;For:分类信息From:新闻5.2.3 判断目录是否存在判断目录是否存在pWindowsWindows并没有提供一个判断目录是否存在的并没有提供一个判断目录是否存在的APIAPI,可以使用,可以使用FindFirstFileFindFirstFile()()函数来实现此功能。函数来实现此功能。FindFirstFile()FindFirstFile()函数的原型如下:函数的原型如下:HANDLE WINAPI FindFirstFile(HANDLE WINAPI Find