求助啊!!!各位大虾!!374长文件名~~~~

请教\CH374\CH374LIB\MCS51\LIB6\EXAM11中的mCmdParam.WriteB.mLbaStart~~~我找了老半天都没有找到mCmdParam.WriteB这个结构体~~~~~请问是在那个头文件里面啊????[Emot]27[/Emot][Emot]28[/Emot][Emot]6[/Emot]

在头文件当中CMD_PARAM结构体当中添加一个WriteB结构


我添加了,调试了~~~~不过这个例子到底是用来做什么的呢???感觉是用来分析长文件名的或者短文件名生成长文件名的????比如我要创建长文件名(123456789abcdefg.txt),怎么办????有例子吗???


这个例程就是用来创建长文件名文件的,创建长文件名需要先把长文件名转换成UNICODE编码,并为该长文件名分配一个短文件名,所谓的长文件名底层都是对应一个短文件名,然后就调用CH374CreateLongName( ),


请教其中的 extern UINT8 CH374WriteBlock( void )函数在那里???似乎我找了CH374HF6.H和PARA.h文件都没有啊???还是名字不同???我用的是模拟并口~~~~~~~~~~~~~~~~~~~我都试了一下,不是说参数不对,就是说应用不对???这个函数是库里面的???还是要自己写啊???可否提供下代码或者应用代码吓~~~~谢谢大虾[Emot]27[/Emot][Emot]19[/Emot][Emot]2[/Emot]


WriteB结构里面有多少项啊???

CH374CreateLongName( )这个函数的作用是什么???如果创建一个长的文件名文件夹那么首先不是把长文件名输入???然后再生成undicode码??然后再生成短文件名???吗??

==================== 以下演示创建及读取长文件名 ============================*/ // 复制长文件名(UNICODE 大端)到LongNameBuf里 memcpy( LongNameBuf, LongName, sizeof(LongName) ); printf( "LongNameBuf 1: %s\n", LongNameBuf ); // 末尾用两个0表示结束 LongNameBuf[sizeof(LongName)] = 0x00; LongNameBuf[sizeof(LongName) + 1] = 0x00; printf( "LongNameBuf 2: %s\n", LongNameBuf ); //for(i=0;i //{printf( "LongNameBuf: %02x\n", LongNameBuf[i] );} // 该长文件名的ANSI编码短文件名(8+3格式) //strcpy( mCmdParam.Create.mPathName, "\\C51\\AA\\长文件名.TXT" ); strcpy( mCmdParam.Create.mPathName, "\\C51\\AA\\长文件名.TXT" ); printf( "Created Long Name :%s\n",mCmdParam.Create.mPathName ); i = CH374CreateLongName( ); ================================= 主函数一开始就copy填充 LongNameBuf是什么意思???不是要等我 strcpy( mCmdParam.Create.mPathName, "\\C51\\AA\\长文件名.TXT" );之后才把我输入 的长文件名送去LongName编码然后再填充吗???~~~~~~~~~~~高手解答啊!!!!

[Emot]19[/Emot][Emot]20[/Emot][Emot]11[/Emot]


怎么没人啊???高手 _study_ { M },红桃6来啊~~~help!!!help!!help!!


025-52638359找冉工,或者rgw@wch.cn 冉工是文件系统高手,擅长长文件名


头文件的定义你按照下面的方式把你的头文件给修改掉: /* 外部命令参数 */ typedef union _CMD_PARAM { struct { UINT8 mBuffer[ MAX_PATH_LEN ]; } Other; struct { UINT32 mReserved; UINT32 mTotalSector; /* 返回: 当前逻辑盘的总扇区数 */ UINT32 mFreeSector; /* 返回: 当前逻辑盘的剩余扇区数 */ UINT8 mDiskFat; /* 返回: 当前逻辑盘的FAT类型 */ } Query; /* CMD_DiskQuery, 查询磁盘信息 */ struct { UINT8 mPathName[ MAX_PATH_LEN ]; /* 输入参数: 路径: [盘符,冒号,斜杠,目录名或者文件名及扩展名...,结束符00H], 其中盘符和冒号可以省略, 例如"C:\DIR1.EXT\DIR2\FILENAME.EXT",00H */ } Open; /* CMD_FileOpen, 打开文件 */ struct { UINT8 mPathName[ MAX_PATH_LEN ]; /* 输入参数: 路径: [盘符,冒号,斜杠,目录名或者文件名及扩展名(含通配符*)...,枚举序号], 其中盘符和冒号可以省略, 例如"C:\DIR1.EXT\DIR2\FILE*",00H */ } Enumer; /* CMD_FileEnumer, 枚举文件,返回文件名 */ struct { UINT8 mUpdateLen; /* 输入参数: 是否允许更新长度: 0禁止,1允许 */ } Close; /* CMD_FileClose, 关闭当前文件 */ struct { UINT8 mPathName[ MAX_PATH_LEN ]; /* 输入参数: 路径: [盘符,冒号,斜杠,目录名或者文件名及扩展名...,结束符00H], 其中盘符和冒号可以省略, 例如"C:\DIR1.EXT\DIR2\FILENAME.EXT",00H */ } Create; /* CMD_FileCreate, 新建文件并打开,如果文件已经存在则先删除后再新建 */ struct { UINT8 mPathName[ MAX_PATH_LEN ]; /* 输入参数: 路径: [盘符,冒号,斜杠,目录名或者文件名及扩展名...,结束符00H], 其中盘符和冒号可以省略, 例如"C:\DIR1.EXT\DIR2\FILENAME.EXT",00H */ } Erase; /* CMD_FileErase, 删除文件并关闭 */ struct { UINT32 mFileSize; /* 输入参数: 新的文件长度,为0FFFFFFFFH则不修改, 返回: 原长度 */ UINT16 mFileDate; /* 输入参数: 新的文件日期,为0FFFFH则不修改, 返回: 原日期 */ UINT16 mFileTime; /* 输入参数: 新的文件时间,为0FFFFH则不修改, 返回: 原时间 */ UINT8 mFileAttr; /* 输入参数: 新的文件属性,为0FFH则不修改, 返回: 原属性 */ } Modify; /* CMD_FileQuery, 查询当前文件的信息; CMD_FileModify, 查询或者修改当前文件的信息 */ struct { UINT32 mSectorOffset; /* 输入参数: 扇区偏移,0则移动到文件头,0FFFFFFFFH则移动到文件尾, 返回: 当前文件指针对应的绝对线性扇区号, 0FFFFFFFFH则已到文件尾 */ } Locate; /* CMD_FileLocate, 移动当前文件指针 */ struct { UINT8 mSectorCount; /* 输入参数: 读取扇区数, 返回: 实际读取扇区数 */ } Read; /* CMD_FileRead, 从当前文件读取数据 */ struct { UINT8 mSectorCount; /* 输入参数: 写入扇区数, 返回: 实际写入扇区数 */ } Write; /* CMD_FileWrite, 向当前文件写入数据 */ struct { UINT8 mSectorCount; /* 输入参数: 读取扇区数, 返回: 实际读取扇区数 */ UINT8 mReserved; UINT8 mLbaCount; UINT8 mReserved5[5]; PUINT8 mDataBuffer; /* 输入参数: 缓冲区起始地址, 返回: 缓冲区当前地址 */ } ReadX; /* CMD_FileReadX, 从当前文件读取数据到指定缓冲区 */ struct { UINT8 mSectorCount; /* 输入参数: 写入扇区数, 返回: 实际写入扇区数 */ UINT8 mReserved; UINT8 mLbaCount; UINT8 mReserved5[5]; PUINT8 mDataBuffer; /* 输入参数: 缓冲区起始地址, 返回: 缓冲区当前地址 */ } WriteX; /* CMD_FileWriteX, 向当前文件写入指定缓冲区的数据 */ struct { UINT8 mSectorCount; /* 累计已读取扇区数 */ UINT8 mActualCount; UINT8 mLbaCount; /* 扇区数 */ UINT8 mRemainCount; UINT32 mLbaStart; /* 起始LBA */ PUINT8 mDataBuffer; /* 缓冲区 */ } ReadB; /* CMD_FileRead, 从当前文件读取数据 */ struct { UINT8 mSectorCount; UINT8 mActualCount; UINT8 mLbaCount; UINT8 mAllocCount; UINT32 mLbaStart; PUINT8 mDataBuffer; } WriteB; struct { UINT32 mDiskSizeSec; /* 返回: 整个物理磁盘的总扇区数 */ } DiskSize; /* CMD_DiskSize, 查询磁盘容量 */ struct { UINT32 mByteOffset; /* 输入参数: 以字节为单位的偏移量, 以字节为单位的文件指针, 返回: 当前文件指针对应的绝对线性扇区号, 0FFFFFFFFH则已到文件尾 */ } ByteLocate; /* CMD_ByteLocate, 以字节为单位移动当前文件指针 */ struct { UINT8 mByteCount; /* 输入参数: 准备读取的字节数,不得大于MAX_BYTE_IO, 返回: 实际读出的字节数 */ UINT8 mByteBuffer[ MAX_BYTE_IO ]; /* 返回: 读出的数据块 */ } ByteRead; /* CMD_ByteRead, 以字节为单位从当前文件读取数据块 */ struct { UINT8 mByteCount; /* 输入参数: 准备写入的字节数,不得大于MAX_BYTE_IO, 返回: 实际写入的字节数 */ UINT8 mByteBuffer[ MAX_BYTE_IO ]; /* 输入参数: 准备写入的数据块 */ } ByteWrite; /* CMD_ByteWrite, 以字节为单位向当前文件写入数据块 */ struct { UINT8 mSaveVariable; /* 输入参数: 为0则恢复单个U盘的变量,为0x80则恢复多个U盘的变量,其它值则备份/保存变量 */ UINT8 mReserved[3]; PUINT8 mBuffer; /* 输入参数: 指向子程序库的变量的备份缓冲区,长度不小于80个字节 */ } SaveVariable; /* CMD_SaveVariable, 备份/保存/恢复子程序库的变量 */ } CMD_PARAM;


程序运行已经没有问题~~~~现在想知道的是:在我输入长文件名后如何获得unicode码???这个需要我自己做软件???374里面有支持吗???还有在输入长文件名后如何生成短文件名???这个也是我自己生成???374有支持没???再就是长文件项属性的填充,374有支持吗???~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~高手help~~~


长文件名需要自己转换成UNICODE码,短文件名是自己指定,你要做的就是前面的两项,然后调用创建长文件名函数即可。


-_-//瀑布汗啊!!!那个Unicode码单单中文就那么多个,我要存起来+英文的那要多少空间啊,挂菜菜啦~~~~~列位大哥可否给点建议啊!!!!泪奔ing~~~~~~~~~

在前面短文件名时,我试过中文名,在mCmdParam.Create.mPathName里面,一个汉字由2个字节表示,那2个字节就是Unicode码吗????如果不是的话如何建立一个汉字与unciode码对应的表捏?????~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~万能的高手啊!!!跪求帮忙啊!!!给建议啊!!~~~~~~~~~~蟹蟹~~~~~~~~~~~~~~~~~[Emot]12[/Emot]


只有登录才能回复,可以选择微信账号登录