⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fatfs_api.c

📁 fs_lib,arm9的fat文件系统
💻 C
📖 第 1 页 / 共 2 页
字号:
			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 + -