查看完整版本: VFS操作代码

Greenland 2008-7-25 21:42

VFS操作代码

VFS 即 Virtual File System,简单的讲就是对存储卡(SD、Memory Stick等等)的读写控制。
第一步,就是判断这台机子有没有存储卡设备:
在AppStart中可以加入如下命令:
UInt32 vfsMgrVersion;
Err  error = FtrGet(sysFileCVFSMgr, vfsFtrIDVersion, &vfsMgrVersion);
  if(error)
  {
   //不支持存储卡
  }
  else
  {
   // check version number of VFS Manager,
   // if necessary
   //if(vfsMgrVersion == expectedVFSMgrVersionNum)
   //支持存储卡
  }
我们可以在Preference 里设置VFSSupported这么一个变量

typedef struct PreferenceType
{
Boolean VFSSupported;
...
} PreferenceType;

如果支持存储卡,则g_prefs.VFSSupported = true;
否则g_prefs.VFSSupported = false;
2、打开文件
CommonErrorAlert是在资源中建立的一个错误弹出对话框。
volRefNum是一个全局变量。
头文件中写:
extern UInt16 volRefNum;
cpp文件中写:
UInt16 volRefNum = sysInvalidRefNum;

defaultTipsDatabasePath是自己定义的一个常量,指的是文件位置及文件名,如"/test/test.txt"。则会在卡的根目录下寻找test文件夹中的test.txt文件。

Err error = errNone;
Boolean handled = false;
FileRef fref;

if (g_prefs.VFSSupported)
{
  error = VFSFileOpen (volRefNum, defaultTipsDatabasePath, vfsModeRead, &fref);
  switch (error)
  {
   case errNone:
   {
    g_prefs.TipsFileRef = fref;
    handled = true;
    break;
   }
/*****************************************/
#ifdef DEBUGMODE
   case expErrCardReadOnly:
   {
    FrmCustomAlert (CommonErrorAlert, "The open mode requested includes write access but the file is read-only.", " ", " ");
    break;
   }
   
   case expErrNotOpen:
   {
    FrmCustomAlert (CommonErrorAlert, "The file system library necessary for this call has not been installed or has not been opened.", " ", " ");
    break;
   }
   
   case vfsErrBadName:
   {
    FrmCustomAlert (CommonErrorAlert, "The pathNameP parameter is invalid.", " ", " ");
    break;
   }
   
   case vfsErrFileNotFound:
   {
    FrmCustomAlert (CommonErrorAlert, "The specified file or directory could not be found.", " ", " ");
    break;
   }
   
   case vfsErrFilePermissionDenied:
   {
    FrmCustomAlert (CommonErrorAlert, "The file cannot be opened in the requested open mode, or it has already been opened with vfsModeExclusive.", " ", " ");
    break;
   }
   
   case vfsErrVolumeBadRef:
   {
    FrmCustomAlert (CommonErrorAlert, "The file cannot be opened in the requested open mode, or it has already been opened with vfsModeExclusive.", " ", " ");
    break;
   }
   
   default:
   {
    ErrAlert (error);
    break;
   }
#endif
/*****************************************/
#ifndef DEBUGMODE
   default:
   {
    FrmCustomAlert (CommonErrorAlert, "Failed to open file!", defaultTipsDatabasePath, " ");
    break;
   }
#endif
  }
}

3、关闭文件
Err VFSFileClose (FileRef fileRef);

4、读写文件
Err VFSFileRead (FileRef fileRef, UInt32 numBytes, void *bufP, UInt32 *numBytesReadP)
Err VFSFileWrite (FileRef fileRef, UInt32 numBytes, const void *dataP, UInt32 *numBytesWrittenP)
Err VFSFileSeek (FileRef fileRef, FileOrigin origin, Int32 offset)

至此可以进行简单的文件读写了!
页: [1]
查看完整版本: VFS操作代码