📄 fatfs_api.c
字号:
return -1;
}
File_Close(file);
}
status->attr = (T_PATTR)status->ptr->data;
return (T_S32)status;
}
T_BOOL FATFSAPI(FindNext)(T_hFILESTAT stat)
{
T_PSEARCH status;
if (stat == FS_INVALID_STATHANDLE)
{
return AK_FALSE;
}
status = (T_PSEARCH)stat;
if (status->attr->exist)
{
if (status->attr->FileId == status->parent->attr->FileId && (status->attr->attr & 0x10) != 0 )
{
status->attr = status->dot2;
return AK_TRUE;
}
}
status->ptr = status->ptr->next;
if (status->ptr == AK_NULL)
{
return AK_FALSE;
}
status->attr = (T_PATTR)status->ptr->data;
return AK_TRUE;
}
T_U32 FATFSTAPI(GetAttribute)(T_hFILESTAT stat)
{
T_PSEARCH status;
if (stat == FS_INVALID_STATHANDLE)
{
return 0;
}
status = (T_PSEARCH)stat;
return status->attr->attr;
}
T_U32 FATFSAPI(GetFileSize)(T_hFILE file)
{
T_U32 length;
length = ((T_PFILE)file)->ptr + 1;
if (((T_PFILE)file)->attr->length < length)
{
((T_PFILE)file)->attr->length = length;
}
return ((T_PFILE)file)->attr->length;
}
T_U32 FATFSTAPI(GetSize)(T_hFILESTAT stat)
{
T_PSEARCH status;
if (stat == FS_INVALID_STATHANDLE)
{
return 0;
}
status = (T_PSEARCH)stat;
return status->attr->length;
}
T_pCSTR FATFSTAPI(GetFileName)(T_hFILESTAT stat)
{
T_PATTR attr;
T_PSEARCH status;
if (stat == FS_INVALID_STATHANDLE)
{
return AK_NULL;
}
status = (T_PSEARCH)stat;
attr = status->attr;
if (status->parent != AK_NULL)
{
if (status->attr->FileId == status->parent->attr->FileId && (status->attr->attr & 0x10) != 0 )
{
return ".";
}
if (status->attr == status->dot2)
{
return "..";
}
}
Str_GetBytes(attr->name, status->FileName, attr->driver->code);
return (T_pCSTR)status->FileName;
}
T_pCSTR FATFSTAPI(GetPath)(T_hFILESTAT stat)
{
T_PATTR attr;
T_PSEARCH status;
T_PSTRING path;
if (stat == FS_INVALID_STATHANDLE)
{
return AK_NULL;
}
status = (T_PSEARCH)stat;
attr = status->attr;
path = File_GetPath(status->attr);
Str_GetBytes(path, status->FileName, attr->driver->code);
Str_Destroy(path);
return (T_pCSTR)status->FileName;
}
T_U32 FATFSTAPI(GetTime)(T_hFILESTAT stat)
{
T_PSEARCH status;
T_PATTR attr;
if (stat == FS_INVALID_STATHANDLE)
{
return 0;
}
status = (T_PSEARCH)stat;
attr = status->attr;
return attr->ModTime | (attr->ModDate << 16);
}
T_U32 FATFSTAPI(GetCTime)(T_hFILESTAT stat)
{
T_PSEARCH status;
T_PATTR attr;
if (stat == FS_INVALID_STATHANDLE)
{
return 0;
}
status = (T_PSEARCH)stat;
attr = status->attr;
return attr->CreatTime | (attr->CreatDate << 16);
}
/*******************************************************************************
* directory operation interface
******************************************************************************/
T_BOOL FATFSAPI(MkDir)(T_pCSTR path, T_U32 mode)
{
T_PFILE file;
T_BOOL ret;
T_PSTRING name;
T_PDRIVER driver;
T_U8 DeviceId;
if (path == AK_NULL)
{
return AK_FALSE;
}
if (path[0] == 0)
{
return AK_FALSE;
}
if (path[1] == ':')
{
DeviceId = Uni_ToUpper(path[0]) - 'A';
}
else
{
DeviceId = fgb.CurDriver;
}
driver = Driver_GetObject(DeviceId);
if(driver == AK_NULL)
{
return AK_FALSE;
}
name = Str_AscCode((T_U8*)path, driver->code);
file = File_Open(AK_NULL, name, FILE_MODE_READ);
if (file == AK_NULL)
{
Str_Destroy(name);
return AK_FALSE;
}
ret = File_Mkdir(file);
if (ret)
{
File_Close(file);
}
Str_Destroy(name);
return ret;
}
T_BOOL FATFSAPI(MkDirs)(T_pCSTR path)
{
T_PSTRING str;
T_BOOL ret;
T_PDRIVER driver;
T_U8 DeviceId;
if (path == AK_NULL)
{
return AK_FALSE;
}
if (path != AK_NULL || path[0] == 0)
{
return AK_FALSE;
}
if (path[1] == ':')
{
DeviceId = Uni_ToUpper(path[0]) - 'A';
}
else
{
DeviceId = fgb.CurDriver;
}
driver = Driver_GetObject(DeviceId);
if(driver == AK_NULL)
{
return AK_FALSE;
}
str = Str_AscCode((T_U8*)path, driver->code);
ret = File_Mkdirs(str);
Str_Destroy(str);
return ret;
}
T_BOOL FATFSAPI(RmDir)(T_pCSTR path)
{
T_PFILE file;
T_PSTRING str;
T_BOOL ret;
T_PDRIVER driver;
T_U8 DeviceId;
if (path == AK_NULL)
{
return AK_FALSE;
}
if (path == AK_NULL || path[0] == 0)
{
return AK_FALSE;
}
if (path[1] == ':')
{
DeviceId = Uni_ToUpper(path[0]) - 'A';
}
else
{
DeviceId = fgb.CurDriver;
}
driver = Driver_GetObject(DeviceId);
if(driver == AK_NULL)
{
return AK_FALSE;
}
str = Str_AscCode((T_U8*)path, driver->code);
file = File_Open(AK_NULL, str, FILE_MODE_READ);
if (file == AK_NULL)
{
return AK_FALSE;
}
ret = AK_FALSE;
if (File_IsFolder(file))
{
ret = File_DeleteFile(file);
}
File_Close(file);
Str_Destroy(str);
return ret;
}
T_BOOL FATFSAPI(IsDir)(T_pCSTR path)
{
T_PFILE file;
T_PSTRING str;
T_BOOL ret;
T_PDRIVER driver;
T_U8 DeviceId;
if (path == AK_NULL)
{
return AK_FALSE;
}
if (path == AK_NULL || path[0] == 0)
{
return AK_FALSE;
}
if (path[1] == ':')
{
DeviceId = Uni_ToUpper(path[0]) - 'A';
}
else
{
DeviceId = fgb.CurDriver;
}
driver = Driver_GetObject(DeviceId);
if(driver == AK_NULL)
{
return AK_FALSE;
}
str = Str_AscCode((T_U8*)path, driver->code);
file = File_Open(AK_NULL, str, FILE_MODE_READ);
if (file == AK_NULL)
{
Str_Destroy(str);
return AK_FALSE;
}
ret = File_IsFolder(file);
File_Close(file);
Str_Destroy(str);
return ret;
}
T_BOOL FATFSAPI(MoveFile)(T_pCSTR SrcStr, T_pCSTR DstStr)
{
T_PFILE source, dest;
T_PSTRING str;
T_BOOL ret;
E_CODE code;
T_CHAR ch;
T_U8 DeviceId;
T_PDRIVER driver;
if (SrcStr == AK_NULL || DstStr == AK_NULL)
{
return AK_FALSE;
}
if (SrcStr[1] == ':')
{
ch = Uni_ToUpper(SrcStr[0]);
DeviceId = (ch - 'A') & 0xff;
}
else
{
DeviceId = fgb.CurDriver;
}
driver = Driver_GetObject(DeviceId);
if (driver == AK_NULL)
{
return AK_FALSE;
}
code = driver->code;
str = Str_AscCode((T_U8*)SrcStr, code);
source = File_Open(AK_NULL, str, FILE_MODE_READ);
Str_Destroy(str);
if (source == AK_NULL)
{
return AK_FALSE;
}
if (!source->attr->exist)
{
File_Close(source);
return AK_FALSE;
}
str = Str_AscCode((T_U8*)DstStr, code);
dest = File_Open(AK_NULL, str, FILE_MODE_READ);
Str_Destroy(str);
if (dest == AK_NULL)
{
File_Close(source);
return AK_FALSE;
}
ret = File_RenameTo(source, dest);
File_Close(source);
File_Close(dest);
return ret;
}
T_BOOL FATFSAPI(CopyFile)(T_pCSTR SrcStr, T_pCSTR DstStr)
{
T_PFILE source, dest;
T_PSTRING str;
E_CODE code1, code2;
T_CHAR ch;
T_U8 DeviceId;
T_PDRIVER driver1, driver2;
T_FILTER filter;
if (SrcStr == AK_NULL || DstStr == AK_NULL)
{
return AK_FALSE;
}
if (SrcStr[1] == ':')
{
ch = Uni_ToUpper(SrcStr[0]);
DeviceId = (ch - 'A') & 0xff;
}
else
{
DeviceId = fgb.CurDriver;
}
driver1 = Driver_GetObject(DeviceId);
if (driver1 == AK_NULL)
{
return AK_FALSE;
}
code1 = driver1->code;
if (DstStr[1] == ':')
{
ch = Uni_ToUpper(DstStr[0]);
DeviceId = (ch - 'A') & 0xff;
}
else
{
DeviceId = fgb.CurDriver;
}
driver2 = Driver_GetObject(DeviceId);
if (driver2 == AK_NULL)
{
return AK_FALSE;
}
code2 = driver2->code;
str = Str_AscCode((T_U8*)SrcStr, code1);
source = File_Open(AK_NULL, str, FILE_MODE_READ);
Str_Destroy(str);
if (source == AK_NULL)
{
return AK_FALSE;
}
if (!source->attr->exist)
{
File_Close(source);
return AK_FALSE;
}
str = Str_AscCode((T_U8*)DstStr,code2);
dest = File_Open(AK_NULL, str, FILE_MODE_CREATE);
Str_Destroy(str);
if (dest == AK_NULL)
{
File_Close(source);
return AK_FALSE;
}
if (File_IsFile(source))
{
if (File_IsFolder(dest))
{
File_CopyFile(source, dest, AK_TRUE);
}
else
{
File_CopyData(source, dest);
}
}
else
{
if (File_IsFile(dest))
{
File_Close(dest);
}
File_Mkdir(dest);
filter.type = FILTER_DEEP;
File_CopyFolder(source, dest, &filter);
}
File_Close(source);
File_Close(dest);
return AK_TRUE;
}
T_pCSTR FATFSAPI(GetVersion)(T_VOID)
{
return AK_VERSION_FSLIB;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -