RFs 目录操作
RFs 可以通过 Connect() 连接到文件服务器,完毕后通过 Close() 关闭连接
常用操作:
- MkDir 与 MkDirAll 创建目录
- GetDir 可以得到 目录的列表到一个 CDir 对像中,这个CDir保存每个一目录的信息,用 TEntry 保存
- 通过 TEntry 得到每个目录的信息
- 注意的是对于目录的结尾一定加上 “\\”,否则认为不是一个目录
- SessionPath 会得到当前会话的路径,SetSessionPath 设置路径
- 头文件加上 f32file.h ,mmp 文件的 library 中添加上 efsrv.lib,然后重新编译
下面是练习用到的代码
代码
#include <f32file.h> // Constants _LIT(KTextConsoleTitle, "Console"); _LIT(KTextFailed, " failed, leave code = %d"); _LIT(KTextPressAnyKey, " [press any key]\n"); // Global Variables LOCAL_D CConsoleBase* console; // write all messages to this LOCAL_D RFs iFs; void printDriveInfo() { // 连接文件服务器 User::LeaveIfError(iFs.Connect()); _LIT(KEnter,"\n"); _LIT(KPromp,"There are drives list:\n"); _LIT(KChar,"%c\n"); console->Printf(KPromp); TChar DriveLetter; TDriveList dList; iFs.DriveList(dList); for(TInt i=0;i<dList.Length();i++) { if (dList[i]) { iFs.DriveToChar(i,DriveLetter); console->Printf(KChar,DriveLetter); console->Printf(KEnter); } } // 用完后,关闭连接 iFs.Close(); } void printDirInfo(const TEntry&); void viewDirInfo() { User::LeaveIfError(iFs.Connect()); _LIT(KMyDir,"c:\\myfile\\"); _LIT(KmyDirAll,"c:\\mytxtfile\\txt\\"); _LIT(KretInfo,"return code=%d"); TInt iRet; iRet = iFs.MkDir(KMyDir); console->Printf(KretInfo,iRet); iRet = iFs.MkDirAll(KmyDirAll); console->Printf(KretInfo,iRet); TBuf<20> sessionPath; User::LeaveIfError(iFs.SessionPath(sessionPath)); _LIT(K1,"session path is:"); _LIT(KEnter,"\n"); console->Printf(K1); console->Printf(sessionPath); console->Printf(KEnter); TBuf<20> defaultSessionPath; User::LeaveIfError(iFs.DefaultPath(defaultSessionPath)); _LIT(K2,"default path:"); console->Printf(K2); console->Printf(defaultSessionPath); console->Printf(KEnter); _LIT(KNewPath,"c:\\myfile\\"); User::LeaveIfError(iFs.SetSessionPath(KNewPath)); User::LeaveIfError(iFs.SessionPath(sessionPath)); console->Printf(K1); console->Printf(sessionPath); console->Printf(KEnter); _LIT(KDir,"C:\\mytxtfile\\"); CDir* dir = NULL; console->ClearScreen(); User::LeaveIfError(iFs.GetDir(KDir,KEntryAttNormal|KEntryAttMatchMask,ESortNone,dir)); for(TInt i=0;i<dir->Count();i++) { printDirInfo((*dir)[i]); console->Getch(); console->ClearScreen(); console->Printf(KEnter); } iFs.Close(); } void printDirInfo(const TEntry& aEntry) { _LIT(Kentery,"\n"); _LIT(KIsDir,"directory\n"); _LIT(KIsReadOnly,"Readonly\n"); _LIT(KIsHidden,"Hidden\n"); _LIT(KIsSystem,"System\n"); _LIT(KIsArchive,"Archive\n"); console->Printf(aEntry.iName); console->Printf(Kentery); TBuf<30> dateString; _LIT(KDatestring4,"%Y%M%D%/0%1%/1%2%/2%3%/3 %:0%H%:1%T%:2%S\n"); aEntry.iModified.FormatL(dateString,KDatestring4); console->Printf(dateString); _LIT(KFmt1,"size:%d bytes\n"); console->Printf(KFmt1,aEntry.iSize); if (aEntry.IsDir()) console->Printf(KIsDir); if (aEntry.IsReadOnly()) console->Printf(KIsReadOnly); if (aEntry.IsHidden()) console->Printf(KIsHidden); if (aEntry.IsSystem()) console->Printf(KIsSystem); if (aEntry.IsArchive()) console->Printf(KIsArchive); } // Local Functions LOCAL_C void MainL(const TDesC& aArgs) { // // add your program code here, example code below // //console->Write(_L("Hello, world!\n")); //printDriveInfo(); viewDirInfo(); console->Printf(_L("Command line args: \"%S\"\n"), &aArgs); } |
安平2009@原创
qi_jianzhou@126.com