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)
至此可以进行简单的文件读写了!