OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9078|回复: 5

fatfs实验中的文件操作碰到的两个疑问

[复制链接]

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
发表于 2013-8-9 14:24:19 | 显示全部楼层 |阅读模式
    最近在做文件系统方面的东西。移植fatfs后可以实现打开一个TXT文件。并读出TXT一段文字出来,设置了512bytes的读取缓冲。
    我的第一个问题是,如何判断我的读文件,读到结尾了,并关闭这个文件。
    我的第二问题是,同样的程序,我只是把TXT文件换成DOC文件后,就在串口上不能正常显示出里面的内容,显示是乱码。可以正常打开docx和doc。但是内容不能显示。
    
        
    关键代码如下
                res = f_open(&file,(const TCHAR*)"0:/stm32f4x7test.doc",FA_OPEN_EXISTING | FA_READ);
if(res == FR_OK)
{
f_read(&file,readTextBuff,sizeof(readTextBuff),(void *)&br);
// strcpy(temp,readTextBuff);
// strcat(temp,'\0');
 usart3.printf("\r\n %s \r\n", readTextBuff);
Toggle_Leds();
}
else usart3.printf("Read Error:%d\r\n",res);



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-7-10
在线时间
2 小时
发表于 2013-8-9 15:14:29 | 显示全部楼层
我也没研究过,但是TXT和DOC虽然储存的都是汉字字符等,但是两个的储存方式,储存结构都是完全不同的,单纯的强制更改当然不是不能正确显示的,我们用的FATFS能打开TXT,但是大不开DOC的,这个是FATFS的功能的限制。
自己的一点见解,欢迎纠正。
回复 支持 反对

使用道具 举报

6

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-7-10
在线时间
2 小时
发表于 2013-8-9 15:19:35 | 显示全部楼层
typedef struct {
BYTE fs_type; /* FAT sub-type (0:Not mounted) */
BYTE drv; /* hysical drive number */
BYTE csize; /* Sectors per cluster (1,2,4...128) */
BYTE n_fats; /* Number of FAT copies (1,2) */
BYTE wflag; /* win[] dirty flag (1:must be written back) */
BYTE fsi_flag; /* fsinfo dirty flag (1:must be written back) */
WORD id; /* File system mount ID */
WORD n_rootdir; /* Number of root directory entries (FAT12/16) */
#if _MAX_SS != 512
WORD ssize; /* Bytes per sector (512, 1024, 2048 or 4096) */
#endif
#if _FS_REENTRANT
_SYNC_t sobj; /* Identifier of sync object */
#endif
#if !_FS_READONLY
DWORD last_clust; /* Last allocated cluster */
DWORD free_clust; /* Number of free clusters */
DWORD fsi_sector; /* fsinfo sector (FAT32) */
#endif
#if _FS_RPATH
DWORD cdir; /* Current directory start cluster (0:root) */
#endif
DWORD n_fatent; /* Number of FAT entries (= number of clusters + 2) */
DWORD fsize; /* Sectors per FAT */
DWORD fatbase; /* FAT start sector */
DWORD dirbase; /* Root directory start sector (FAT32:Cluster#) */
DWORD database; /* Data start sector */
DWORD winsect; /* Current sector appearing in the win[] */
BYTE win[_MAX_SS]; /* Disk access window for Directory, FAT (and Data on tiny cfg) */
} FATFS;
这个FATFS的结构声明,DOC看似简单,但是它的功能多,功能全,其实是肯定很复杂的,用这么几个结构体就想存下DOC的内部成员,是不可能的,所以FATFS是不具备打开DOC的。
回复 支持 反对

使用道具 举报

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
 楼主| 发表于 2013-8-9 15:28:26 | 显示全部楼层
回复【2楼】twins7713:
---------------------------------
  可算找到战友啊!我的程序能执行打开操作并返回 FR_OK这个值,说明FATFS是支持这种文件格式的。举个例子,我查看了关于图片浏览器的文件操作,其中有一句:
  /* Bypass Bitmap header */ 
  f_lseek (&file, 54);

   它不是从文件起始开始读的,而是跳了54个字节。
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2013-8-9 15:42:42 | 显示全部楼层
楼主想太多了,居然想在单片机上打开doc……
业余程序玩家。
回复 支持 反对

使用道具 举报

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
 楼主| 发表于 2013-8-9 15:48:41 | 显示全部楼层
回复【5楼】ofourme:
---------------------------------
    好吧,承认楼主有点异想天开。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-15 10:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表