




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MFC下的文件类11. MFC下的文件类 1. 文件操作的方法 使用Visual C+编程,有如下方法进行文件操作:(1)使用标准C运行库函数,包括fopen、fclose、fseek等。(2)使用Win16下的文件和目录操作函数,如lopen、lclose、lseek等。不过,在Win32下,这些函数主要是为了和Win16向后兼容。(3)使用Win32下的文件和目录操作函数,如CreateFile,CopyFile,DeleteFile,FindNextFile,等等。Win32下,打开和创建文件都由CreateFile完成,成功的话,得到一个Win32下的句柄,这不同于“C”的fopen返回的句柄。在Win16下,该句柄和C运行库文件操作函数相容。但在Win32下,“C”的文件操作函数不能使用该句柄,如果需要的话,可以使用函数_open_osfhandle从Win32句柄得到一个“C”文件函数可以使用的文件句柄。关闭文件使用Win32的CloseHandle。在Win32下,CreateFile可以操作的对象除了磁盘文件外,还包括设备文件如通讯端口、管道、控制台输入、邮件槽等等。(4)使用CFile和其派生类进行文件操作。CFile从CObject派生,其派生类包括操作文本文件的CStdioFile,操作内存文件的CmemFile,等等。CFile是建立在Win32的文件操作体系的基础上,它封装了部分Win32文件操作函数。最好是使用CFile类(或派生类)的对象来操作文件,必要的话,可以从这些类派生自己的文件操作类。统一使用CFile的界面可以得到好的移植性。2. MFC的文件类 MFC用一些类来封装文件访问的Win32 API。以CFile为基础,从CFile派生出几个类,如CStdioFile,CMemFile,MFC内部使用的CMiororFile,等等。1. CFile的结构 1. CFile定义的枚举类型 CFile类定义了一些和文件操作相关的枚举类型,主要有四种:OpenFlags,Attribute,SeekPosition,hFileNull。下面,分别解释这些枚举类型。1. OpenFlags OpenFlags定义了13种文件访问和共享模式:enum OpenFlags /第一(从右,下同)至第二位,打开文件时访问模式,读/写/读写modeRead = 0x0000,modeWrite = 0x0001,modeReadWrite = 0x0002,shareCompat = 0x0000, /32位MFC中没用/第五到第七位,打开文件时的共享模式shareExclusive = 0x0010,/独占方式,禁止其他进程读写shareDenyWrite = 0x0020,/禁止其他进程写shareDenyRead = 0x0030,/禁止其他进程读shareDenyNone = 0x0040,/允许其他进程写/第八位,打开文件时的文件继承方式modeNoInherit = 0x0080,/不允许子进程继承/第十三、十四位,是否创建新文件和创建方式modeCreate = 0x1000,/创建新文件,文件长度0modeNoTruncate = 0x2000,/创建新文件时如文件已存在则打开/第十五、十六位,文件以二进制或者文本方式打开,在派生类CStdioFile中用typeText = 0x4000,typeBinary = (int)0x8000;2. Attribute Attribute定义了文件属性:正常、只读、隐含、系统文件,文件或者目录等。enum Attribute normal = 0x00,readOnly = 0x01,hidden = 0x02,system = 0x04,volume = 0x08,directory = 0x10,archive = 0x203. SeekPosition SeekPosition定义了三种文件位置:头、尾、当前:enum SeekPositionbegin = 0x0,current = 0x1,end = 0x2;4. hFileNull hFileNull定义了空文件句柄enum hFileNull = -1 ;1. CFile的其他一些成员变量 CFile除了定义枚举类型,还定义了一些成员变量。例如:UINT m_hFile该成员变量是public访问属性,保存:CreateFile返回的操作系统的文件句柄。MFC重载了运算符号HFILE来返回m_hFile,这样在使用HFILE类型变量的地方可以使用CFile对象。BOOL m_bCloseOnDelete;CString m_strFileName;这两个成员变量是protected访问属性。m_bCloseOnDelete用来指示是否在关闭文件时删除CFile对象;m_strFileName用来保存文件名。2. CFile的成员函数 CFile的成员函数实现了对Win32文件操作函数的封装,完成以下动作:打开、创建、关闭文件,文件指针定位,文件的锁定与解锁,文件状态的读取和修改,等等。其中,用到了m_hFile文件句柄的一般是虚拟函数,和此无关的一般是静态成员函数。一般地,成员函数被映射到对应的Win32函数,如表11-1所示。表11-1 CFile函数对Win32文件函数的封装虚拟 静态 成员函数 对应的Win32函数 文件的创建、打开、关闭 Abort CloseHandle Duplicate DuplicateHandle Open CreateFile Close CloseHandle 文件的读写 Read ReadFile ReadHuge(向后兼容) 调用Read成员函数 Write WriteFile WriteHuage(向后兼容) 调用Write成员函数 Flush FlushFileBuffers 文件定位 Seek SetFilePointer SeekToBegin 调用Seek成员函数 SeekToEnd 调用Seek成员函数 GetLength 调用Seek成员函数 SetLength SetEndOfFile 文件的锁定/解锁 LockRange LockFile UnlockRange UnlockFile 文件状态操作函数 GetPosition SetFilePointer GetStatus(CFileStatus&) GetFileTime,GetFileSize等 GetStatus(LPSTR lpszFileName CFileStatus&) FindFirstFile GetFileName 不是简单地映射到某个函数 GetFileTitle GetFilePath SetFilePath SetStatus 改名和删除 Rename MoveFile Remove DeleteFile 1. CFile的部分实现 这里主要讨论CFile对象的构造函数和文件的打开/创建的过程。1. 构造函数 CFile有如下几个构造函数: CFile() 缺省构造函数,仅仅构造一个CFile对象,还必须使用Open成员函数来打开文件。 CFile(int hFile) 已经打开了一个文件hFile,在此基础上构造一个CFile对象来给它打包。HFile将被赋值给CFile的成员变量m_hFile。 CFile(LPCTSTR lpszFileName, UINT nOpenFlags) 指定一个文件名和文件打开方式,构造CFile对象,调用Open打开/创建文件,把文件句柄保存到m_hFile。1. 打开/创建文件 Open的原型如下:BOOL CFile:Open(LPCTSTR lpszFileName, UINT nOpenFlags,CFileException* pException)Open调用Win32函数:CreateFile打开文件,并把文件句柄保存到成员变量m_hFile中。CreateFile函数的原型如下:HANDLE CreateFile(LPCTSTR lpFileName,/ pointer to name of the file DWORD dwDesiredAccess,/ access (read-write) mode DWORD dwShareMode,/ share mode LPSECURITY_ATTRIBUTES lpSecurityAttributes, /pointer to security descriptor DWORD dwCreationDistribution,/ how to create DWORD dwFlagsAndAttributes,/ file attributes HANDLE hTemplateFile/ handle to file with attributes to copy);显然,Open必须把自己的两个参数lpszFileName和nOpenFlags映射到CreateFile的七个参数上。从OpenFlags的定义可以看出,(nOpenFlags & 3)表示了读写标识,映射成变量dwAccess,可以取值为Win32的GENERIC_READ、GENERIC_WRITE、GENERIC_READ|GENERIC_WRITE。(nOpenFlags & 0x70)表示了共享模式,映射成变量dwShareMode,可以取值为Win32的FILE_SHARE_READ、FILE_SHARE_WRITE、FILE_SHARE_WRITE|FILE_SHARE_READ。Open定义了一个局部的SECURITY_ATTRIBUTES变量sa,(nOpenFlags & 0x80)被赋值给sa.bInheritHandle。(nOpenFlags & modeCreate)表示了创建方式,映射成变量dwCreateFlag,可以取值为Win32的OPEN_ALWAYS、CREATE_ALWAYS、OPEN_EXISTING。在生成了上述参数之后,先调用:CreateFile:HANDLE hFile =:CreateFile(lpszFileName,dwAccess, dwShareMode, &sa,dwCreateFlag, FILE_ATTRIBUTE_NORMAL, NULL);然后,hFile被赋值给成员变量m_hFile,m_bCloseOnDelete被设置为TRUE。由上可以看出,CFile打开(创建)一个文件时大大简化了: CreateFile函数的复杂性,即只需要指定一个文件名、一个打开文件的参数即可。若该参数指定为0,则表示以只读方式打开一个存在的文件,独占使用,不允许子进程继承。在CFile对象使用时,如果它是在堆中分配的,则应该销毁它;如果在栈中分配的,则CFile对象将被自动销毁。销毁时析构函数被调用,析构函数是虚拟函数。若m_bCloseOnDelete为真且m_hFile非空,则析构函数调用Close关闭文件。至于其他CFile成员函数的实现,这里不作分析了。1. CFile的派生类 这里主要简要地介绍CStdioFile和CmemFile及CFileFind。1. CStdioFile CStdioFile对文本文件进行操作。CStdioFile定义了新的成员变量m_pStream,类型是FILE*。在打开或者创建文件时,使用_open_osfhandle从m_hFile(Win32文件句柄)得到一个“C”的FILE类型的文件指针,然后,在文件操作中,使用“C”的文件操作函数。例如,读文件使用_fread,而不是:ReadFile,写文件使用了_fwrite,而不是:WriteFile,等等。m_hFile是CFile的成员变量。另外,CStdioFile不支持CFile的Dumplicate、LockRange、UnlockRange操作,但是实现了两个新的操作ReadString和WriteString。2. CMemFile CMemFile把一块内存当作一个文件来操作,所以,它没有打开文件的操作,而是设计了Attach和Detach用来分配或者释放一块内存。相应地,它提供了Alloc、Free虚拟函数来操作内存文件,它覆盖了Read、Write来读写内存文件。3. CFileFind 为了方便文件查找,MFC把有关功能归结成为一个类CFileFind。CFileFind派生于CObject类。首先,它使用FindFile和FineNextFile包装了Win32函数:FindFirstFile和:FindNextFile;其次,它提供了许多函数用来获取文件的状态或者属性。使用CFileStatus结构来描述文件的属性,其定义如下:struct CFileStatusCTime m_ctime; / 文件创建时间CTime m_mtime; / 文件最近一次修改时间CTime m_atime; / 文件最近一次访问时间LONG m_size; / 文件大小BYTE m_attribute; / 文件属性BYTE _m_padding; / 没有实际含义,用来增加一个字节TCHAR m_szFullName_MAX_PATH; /绝对路径#ifdef _DEBUG/实现Dump虚拟函数,输出文件属性void Dump(CDumpContext& dc) const;#endif;例如:CFileStatus status;pFile-GetStatus(status);#ifdef _DEBUGstatus.dump(afxDump);#endif解读VC+编程中的文件操作API和CFile类解读VC+编程中的文件操作API和CFile类 2006年03月06日09:37 天极yesky 作者:RisingMine在VC编程中,操作文件的方法主要有两种:利用API函数和MFC的CFile类。微软在其中封装了文件的一般操作,下面我就介绍一下如何利用这两种方法实现文件操作。1创建或打开一个文件 API函数CreateFile可打开和创建文件、管道、邮槽、通信服务、设备以及控制台,但是在此时只是介绍用这个函数怎么实现创建和打开一个文件。HANDLE CreateFile(LPCTSTR lpFileName, / 要打开的文件名DWORD dwDesiredAccess, / 文件的操作属性DWORD dwShareMode, / 文件共享属性 LPSECURITY_ATTRIBUTES lpSecurityAttributes,/ 文件安全特性DWORD dwCreationDisposition, /文件操作DWORD dwFlagsAndAttributes, / 文件属性HANDLE hTemplateFile / 如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性 );文件的操作属性:如果为零,表示只允许获取与一个设备有关的信息,GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);文件的共享属性:零表示不共享; FILE_SHARE_READ 或 FILE_SHARE_WRITE 表示允许对文件进行读/写共享访问;文件的操作有:CREATE_NEW:创建文件;如文件存在则会出错CREATE_ALWAYS:创建文件,会改写前一个文件OPEN_EXISTING:文件必须已经存在。由设备提出要求OPEN_ALWAYS:如文件不存在则创建它TRUNCATE_EXISTING:将现有文件缩短为零长度文件属性有:FILE_ATTRIBUTE_ARCHIVE:标记归档属性FILE_ATTRIBUTE_COMPRESSED:将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式FILE_ATTRIBUTE_NORMAL:默认属性FILE_ATTRIBUTE_HIDDEN:隐藏文件或目录FILE_ATTRIBUTE_READONLY:文件为只读FILE_ATTRIBUTE_SYSTEM:文件为系统文件FILE_FLAG_WRITE_THROUGH: 操作系统不得推迟对文件的写操作FILE_FLAG_OVERLAPPED:允许对文件进行重叠操作FILE_FLAG_NO_BUFFERING:禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块FILE_FLAG_RANDOM_ACCESS:针对随机访问对文件缓冲进行优化FILE_FLAG_SEQUENTIAL_SCAN:针对连续访问对文件缓冲进行优化FILE_FLAG_DELETE_ON_CLOSE:关闭了上一次打开的句柄后,将文件删除。特别适合临时文件可以组合的属性有:FILE_FLAG_WRITE_THROUGH,FILE_FLAG_OVERLAPPED,FILE_FLAG_NO_BUFFERING,FILE_FLAG_RANDOM_ACCESS,FILE_FLAG_SEQUENTIAL_SCAN,FILE_FLAG_DELETE_ON_CLOSE,FILE_FLAG_BACKUP_SEMANTICS,FILE_FLAG_POSIX_SEMANTICS,FILE_FLAG_OPEN_REPARSE_POINT,FILE_FLAG_OPEN_NO_RECALL如果成功返回一个打开文件得句柄,如果调用函数之前文件存在,文件操作属性为:CREATE_ALWAYS 或 OPEN_ALWAYS,使用GetLastError函数返回的是ERROR_ALREADY_EXISTS(包括函数操作成功),如果之前函数不存在,则返回0。使用失败返回INVALID_HANDLE_VALUE,要取得更多的信息,使用GetLastError函数。文件关闭用:BOOL CloseHandle(HANDLE hObject / handle to object to close);例子1、在当前目录下面创建一个文件:HANDLE handle;DWORD Num;handle= :CreateFile(new.tmp,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_FLAG_DELETE_ON_CLOSE,NULL);if(INVALID_HANDLE_VALUE!= handle ):SetFilePointer(handle,0,0,FILE_BEGIN);char Buffer = 这是个刚创建的文件;:WriteFile(handle,Buffer,sizeof(Buffer),&Num,NULL);ZeroMemory(Buffer,sizeof(Buffer);:SetFilePointer(handle,0,0,FILE_BEGIN);:ReadFile(handle,Buffer,sizeof(Buffer),&Num,NULL);MessageBox(Buffer);:CloseHandle(handle); 可以改变上面的创建文件的属性和操作看下不同效果。CFile创建和打开一个文件:创建文件和打开文件的方法有很多种,下面简单介绍下几个构造函数:CFile( LPCTSTR lpszFileName, UINT nOpenFlags );throw( CFileException );CFile( );BOOL Open( LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL );lpszFileName:文件名称,可以是相对路径,绝对路径或网络路径nOpenFlags:打开方式有:CFile:modeCreate 调用构造函数构造一个新文件,如果文件已存在,则长度变成0。CFile:modeNoTruncate 此值与modeCreate组合使用。如果所创建的文件已存在则其长度不变为0。因而此文件被打开,或者作为一个新文件或者作为一个已存在的文件。这将是很有用的,例如当打开一个可能存在也可能不存在的文件时。CFile:modeRead 打开文件仅供读。CFile:modeReadWrite 打开文件供读写。CFile:modeWrite 打开文件仅供写。CFile:modeNoInherit 阻止文件被子进程继承。CFile:ShareDenyNone 不禁止其它进程读或写访问,打开文件。如果文件已被其它进程以兼容模式打开,则Create失败。CFile:ShareDenyRead 打开文件,禁止其它进程读此文件。如果文件已被其它进程以兼容模式打开,或被其它进程读,则Create失败。CFile:ShareDenyWrite 打开文件,禁止其它进程写此文件。如果文件已被其它进程以兼容模式打开,或被其它进程写,则Create失败。CFile:ShareExclusive 以独占模式打开文件,禁止其它进程对文件的读写。如果文件已经以其它模式打开读写(即使被当前进程),则构造失败。CFile:ShareCompat 此标志在32位MFC中无效。此标志在使用CFile: Open时映射为CFile:ShareExclusive。CFile:typeText 对回车换行设置特殊进程(仅用于派生类)。CFile:typeBinary 设置二进制模式(仅用于派生类)。下面给出MSDN中的一个例子:char* pFileName = test.dat;TRYCFile f( pFileName, CFile:modeCreate | CFile:modeWrite );CATCH( CFileException, e )#ifdef _DEBUGafxDump File could not be opened m_cause m_cause);MessageBox(str);file.Abort();e-Delete();读取数据:BOOL ReadFile(HANDLE hFile, /文件的句柄LPVOID lpBuffer, /用于保存读入数据的一个缓冲区DWORD nNumberOfBytesToRead, /要读入的字符数LPDWORD lpNumberOfBytesRead, /从文件中实际读入的字符数LPOVERLAPPED lpOverlapped /如文件打开时指定了FILE_FLAG_OVERLAPPED,那么必须,用这个参数引用一个特殊的结构。该结构定义了一次异步读取操作。否则,应将这个参数设为NULL);CFile的成员函数有:UINT Read (void* lpBuf,UINT nCount); throw(CFileException);/ 返回值是传输到缓冲区的字节数。写入数据:BOOL WriteFile(HANDLE hFile, /文件的句柄LPCVOID lpBuffer, /要写入的一个数据缓冲区DWORD nNumberOfBytesToWrite, /要写入数据的字节数量。如写入零字节,表示什么都不写入,但会更新文件的上一次修改时间。LPDWORD lpNumberOfBytesWritten, /实际写入文件的字节数量LPOVERLAPPED lpOverlapped / OVERLAPPED,倘若在指FILE_FLAG_OVERLAPPED的前提下打开文件,这个参数就必须引用一个特殊的结构。该结构定义了一次异步写操作。否则,该参数应置为NULL);void Write(const void* lpBuf,UINT nCount);throw (CFileException);lpBuf:指向用户提供的缓冲区,包含将写入文件中的数据nCount:从缓冲区内传输的字节数。对文本模式的文件,回车换行作为一个字符。下面是象一个文件中写入数据的例子:CFile file;tryfile.Open(d:/my.dat,CFile:modeCreate|CFile:modeWrite);file.SeekToBegin();char Data = 111n1111;file.Write(Data,sizeof(Data);file.Flush();file.Close();catch(CFileException *e)CString str;str.Format(读取数据失败的原因是:%d,e-m_cause);MessageBox(str);file.Abort();e-Delete();解读VC+编程中的文件操作API和CFile类(3) 2006年03月06日09:37 天极yesky3取得和设置文件的创建时间、最后访问时间、最后写时间BOOL GetFileTime(HANDLE hFile, / 文件句柄LPFILETIME lpCreationTime, / 创建时间LPFILETIME lpLastAccessTime, / 最后访问时间LPFILETIME lpLastWriteTime / 最后写时间 );BOOL SetFileTime(HANDLE hFile, CONST FILETIME *lpCreationTime, CONST FILETIME *lpLastAccessTime, CONST FILETIME *lpLastWriteTime );typedef struct _FILETIME DWORD dwLowDateTime; DWORD dwHighDateTime; FILETIME;取得三个参数都是FILETIME结构,得到的都是UTC时间,可以通过API函数FileTimeToLocalFileTime()和FileTimeToSystemTime()将他们转换为本地时间和系统时间格式,也可以通过LocalFileTimeToFileTime 和SystemTimeToFileTime()转换回来,通过SetFileTime设置文件的创建时间、最后访问时间、最后写时间。由于使用的时候要先打开文件,而且取得的最后访问时间就是当前时间,没有多大意义,且比较麻烦,下面介绍CFile类中的静态方法。static BOOL PASCAL GetStatus( LPCTSTR lpszFileName, CFileStatus& rStatus );static void SetStatus( LPCTSTR lpszFileName, const CFileStatus& status );throw( CFileException );返回的是一个CfileStatus对象,这个结构的具体的成员变量包括:struct CFileStatusCTime m_ctime; / 文件创建时间CTime m_mtime; / 文件最近一次修改时间CTime m_atime; / 文件最近一次访问时间LONG m_size; / 文件大小BYTE m_attribute; / 文件属性BYTE _m_padding; / 没有实际含义,用来增加一个字节TCHAR m_szFullName_MAX_PATH; /绝对路径#ifdef _DEBUG/实现Dump虚拟函数,输出文件属性void Dump(CDumpContext& dc) const;#endif;下面就举一个例子来实现:CFileStatus status;char *path = D:VSS;if(CFile:GetStatus( path, status )CString cTime,mTime,aTime;cTime = status.m_ctime.Format(文件建立时间:%Y年%m月%d日 %H时%M分%S秒);mTime = status.m_mtime.Format(文件最近修改时间:%Y年%m月%d日 %H时%M分%S秒);aTime = status.m_atime.Format(文件最近访问时间:%Y年%m月%d日 %H时%M分%S秒);CString str;str = cTime + n + mTime +n + aTime ;MessageBox(str);4取得和设置文件的属性DWORD GetFileAttributes(LPCTSTR lpFileName /文件或文件夹路经);BOOL SetFileAttributes(LPCTSTR lpFileName, / 文件名DWORD dwFileAttributes / 要设置的属性);取得的文件属性包括:FILE_ATTRIBUTE_ARCHIVE,FILE_ATTRIBUTE_HIDDEN,FILE_ATTRIBUTE_NORMAL,FILE_ATTRIBUTE_OFFLINE,FILE_ATTRIBUTE_READONLY,FILE_ATTRIBUTE_SYSTEM,FILE_ATTRIBUTE_TEMPORARY不能设置的文件属性包括有:FILE_ATTRIBUTE_COMPRESSED,FILE_ATTRIBUTE_DIRECTORY,FILE_ATTRIBUTE_ENCRYPTED,FILE_ATTRIBUTE_REPARSE_POINT,FILE_ATTRIBUTE_SPARSE_FILE,FILE_ATTRIBUTE_SYSTEM。CFileStatus中也定义了一组属性:enum Attribute normal,readOnly,hidden,system,volume,directory,archive;可以通过if(status. m_attribute& readOnly) = =FILE_ATTRIBUTE_READONLY)来判断,这里利用另外的API来实现获得文件的详细信息:HANDLE FindFirstFile(LPCTSTR lpFileName, /文件或文件夹路经rLPWIN32_FIND_DATA lpFindFileData );BOOL FindNextFile(HANDLE hFindFile,LPWIN32_FIND_DATA lpFindFileData );BOOL FindClose(HANDLE hFindFile );取得的是一个WIN32_FIND_DATA结构;typedef struct _WIN32_FIND_DATA DWORD dwFileAttributes; /文件属性FILETIME ftCreationTime; / 文件创建时间FILETIME ftLastAccessTime; / 文件最后一次访问时间FILETIME ftLastWriteTime; / 文件最后一次修改时间DWORD nFileSizeHigh; / 文件长度高32位DWORD nFileSizeLow; / 文件长度低32位DWORD dwReserved0; / 系统保留DWORD dwReserved1; / 系统保留TCHAR cFileName MAX_PATH ; / 长文件名TCHAR cAlternateFileName 14 ; / 8.3格式文件名 WIN32_FIND_DATA, *PWIN32_FIND_DATA;也可以利用另外一个函数来取得文件的信息:BOOL GetFileInformationByHandle(HANDLE hFile, / 文件的句柄 LPBY_HANDLE_FILE_INFORMATION lpFileInformation );函数填充的是BY_HANDLE_FILE_INFORMATION结构体:typedef struct _BY_HANDLE_FILE_INFORMATION DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD dwVolumeSerialNumber; / 文件所在的磁盘的序列号DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD nNumberOfLinks; /链接的数目DWORD nFileIndexHigh; DWORD nFileIndexLow; BY_HANDLE_FILE_INFORMATION;下面就举一个例子来实现: HANDLE handle;WIN32_FIND_DATA find_data;handle = : FindFirstFile(D:VSS,&find_data);FindClose(handle);find_data.dwFileAttributes = find_data.dwFileAttributes|FILE_ATTRIBUTE_READONLY;:SetFileAttributes(D:VSS,find_data.dwFileAttributes);在上面的介绍中,除了可以设置文件的属性之外,在操作的过程当中也可以取得文件的其他一些信息,可以根据具体的需要来实现。解读VC+编程中的文件操作API和CFile类(4) 2006年03月06日09:37 天极yesky 5获取文件名,文件类型,文件长度,文件路径用利用CFile打开一个文件时,可以在利用成员函数virtual CString GetFileName( ) const, virtual CString GetFileTitle( ) const, virtual CString GetFilePath( ) const, virtual DWORD GetLength( ) const;throw( CFileException );来取得相关信息,如果一个文件的全路经是: c:windowswritemyfile.wri,则每个函数取得的是: myfile.wri, myfile, c:windowswritemyfile.wri. GetLen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 标准工程承包合同模板2篇
- 应急救援协议(医疗救护)4篇
- 企业间财产租赁合同范本2篇
- 保全车间绩效考核合同6篇
- 新解读《GB-T 30873-2014耐火材料 抗热震性试验方法》
- 新解读《GB-T 31017-2014移动实验室 术语》
- 新解读《GB-T 31124-2014聚碳酸亚丙酯(PPC)》
- 美甲店套餐出售合同范本
- 售后保密合同范本
- 矿产企业合作合同范本
- T/CAPE 12004-2022草酸二甲酯加氢制备乙二醇催化剂
- 水平定向钻进管线铺设工程技术规范
- 水利安全风险防控“六项机制”与安全生产培训
- DB44-T 2452-2023 高速公路服务设施建设规模设计规范
- 跨境电商物流风险管理-全面剖析
- 岩移观测施工方案
- 2025济南市厂房租赁合同
- IP授权合作及衍生品开发协议
- 渠道与代理商管理
- 2025年小学五年体育试题及答案
- YS/T 3045-2022埋管滴淋堆浸提金技术规范
评论
0/150
提交评论