|
6楼
楼主 |
发表于 2008-9-24 16:45:59
|
只看该作者
本帖最后由 Gorgon_Meducer 于 2012-8-1 21:52 编辑
[文件的存放结构] ——如何读写指定的文件
<font color=blue>[原理解析]
[数据结构]
[关键代码]
>>如何从文件的簇链中获取当前簇的后续簇
- /***********************************************************
- * 函数说明: 获取当前簇的下一个簇 *
- * 输入: BPB缓冲,当前簇号 *
- * 输出: 下一个簇号 *
- * 调用函数: 无 *
- ***********************************************************/
- static UINT32 Get_Next_Cluster(FAT_BPB *pFATBPB,UINT32 dwCluster)
- {
- UINT32 dwSectorNumber;
- UINT16 wByteOffset;
- BYTE chSectorBuffer[512];
-
- dwSectorNumber = pFATBPB->BPB_ResvdSecCnt +
- ((dwCluster * 4) / (pFATBPB->BPB_BytePerSec));
- wByteOffset = (dwCluster * 4) % (pFATBPB->BPB_BytePerSec);
- /* 读取指定的扇区 */
- if (!GET_SECTOR(dwSectorNumber,chSectorBuffer))
- {
- /* 读取错误 */
- return FAT_ITEM_BAD_CLUSTER;
- }
-
- /* 获取下一个簇的簇号 */
- return TYPE_CONVERSION
- (
- &chSectorBuffer[wByteOffset],
- UINT32
- );
- }
复制代码 >>如何根据获取的目录项信息顺序的读取到指定的文件内容 [使用范例]
Example A:
- //显示根目录下所有TXT文件的文件名及文件内容
- UINT32 dwLastEntry = 0;
- UINT32 dwReadPoint = 0;
- BYTE chBuffer[512];
- UINT16 wSize = 0;
- BYTE chBuffer[sizeof(FAT32_DIR_ENTRY)];
- FAT32_DIR_ENTRY Entry = {0};
-
- while(Find_File_Extend_Name
- (
- (FAT_BPB *)(g_chBPBBuffer + 11),
- 2,
- "TXT",
- &dwLastEntry,
- &Entry
- ))
- {
- UINT8 n = 0;
- UINT8 *pchName = Entry.DIR_Name;
-
- for (n = 0;n < 11;n++)
- {
- while(!SERIAL_OUT(pchName[n]));
- }
- while(!SERIAL_OUT(10));
- while(!SERIAL_OUT(13));
-
- dwReadPoint = 0;
- while(Read_File_Sectors
- (
- (FAT_BPB *)(g_chBPBBuffer + 11),
- &Entry,
- &dwReadPoint,
- chBuffer,
- &wSize
- ))
- {
- BYTE *p = chBuffer;
- if (wSize == 0)
- {
- break;
- }
- while(wSize--)
- {
- while(!SERIAL_OUT(*p))
- {
- PROC_Serial_Transmitter();
- }
- PROC_Serial_Transmitter();
- p++;
- }
- }
- while(!SERIAL_OUT(10));
- while(!SERIAL_OUT(13));
-
- }
复制代码 |
|