關(guān)于CH376修改文件創(chuàng)建時(shí)間的問(wèn)題

前面打了很多字,詳細(xì)的描寫(xiě)了調(diào)試的過(guò)程,點(diǎn)提交提示我沒(méi)有登錄,有點(diǎn)累了,簡(jiǎn)單描述一下吧


文件創(chuàng)建、讀寫(xiě)都沒(méi)問(wèn)題,修改文件創(chuàng)建時(shí)間不成功,所有想到的方法試過(guò),時(shí)間一直都是2004/1/1,什么原因,

1、修改宏的時(shí)間,失敗

2、使用例程,失敗

3、自己寫(xiě)函數(shù),失敗


宏時(shí)間:

#ifndef?? ?DEF_WILDCARD_CHAR
#define?? ?DEF_WILDCARD_CHAR?? ??? ?0x2A?? ??? ??? ?/* 路徑名的通配符 '*' */
#define?? ?DEF_SEPAR_CHAR1?? ??? ?0x5C?? ??? ??? ?/* 路徑名的分隔符 '\' */
#define?? ?DEF_SEPAR_CHAR2?? ??? ?0x2F?? ??? ??? ?/* 路徑名的分隔符 '/' */
#define?? ?DEF_FILE_YEAR?? ??? ??? ?2017?? ??? ??? ?/* 默認(rèn)文件日期: 2004年 */
#define?? ?DEF_FILE_MONTH?? ??? ??? ?12?? ??? ??? ??? ?/* 默認(rèn)文件日期: 1月 */
#define?? ?DEF_FILE_DATE?? ??? ??? ?1?? ??? ??? ??? ?/* 默認(rèn)文件日期: 1日 */
#endif

例程:

UINT8?? ?SetFileCreateTime( PUINT8 iFileName, UINT16 iCreateDate, UINT16 iCreateTime )
{
?? ?UINT8?? ?s;
?? ?
?? ?printf("iFileName : %s\r\n", iFileName);
?? ?s = CH376FileOpen( iFileName );? /* 打開(kāi)文件 */
?? ?if ( s == USB_INT_SUCCESS ) {
?? ??? ?/* 文件讀寫(xiě)操作等... */
?? ??? ?s = CH376DirInfoRead( );? /* 讀取當(dāng)前文件的目錄信息FAT_DIR_INFO,將相關(guān)數(shù)據(jù)調(diào)到內(nèi)存中 */
?? ??? ?if ( s == USB_INT_SUCCESS ) {
?? ??? ??? ?buf[0] = (UINT8)iCreateTime;? /* 文件創(chuàng)建的時(shí)間,低8位在前 */
?? ??? ??? ?buf[1] = (UINT8)(iCreateTime>>8);? /* 文件創(chuàng)建的時(shí)間,高8位在后 */
?? ??? ??? ?CH376WriteOfsBlock( buf, STRUCT_OFFSET( FAT_DIR_INFO, DIR_CrtTime ), 2 );? /* 向內(nèi)部緩沖區(qū)偏移地址DIR_CrtTime寫(xiě)入2個(gè)字節(jié) */
?? ??? ??? ?buf[0] = (UINT8)iCreateDate;? /* 文件創(chuàng)建的日期,低8位在前 */
?? ??? ??? ?buf[1] = (UINT8)(iCreateDate>>8);? /* 文件創(chuàng)建的日期,高8位在后 */
?? ??? ??? ?CH376WriteOfsBlock( buf, STRUCT_OFFSET( FAT_DIR_INFO, DIR_CrtDate ), 2 );? /* 向內(nèi)部緩沖區(qū)偏移地址DIR_CrtDate寫(xiě)入2個(gè)字節(jié) */
?? ??? ??? ?s = CH376DirInfoSave( );? /* 保存文件的目錄信息 */
?? ??? ??? ?if ( s == USB_INT_SUCCESS ) {? /* 成功修改并保存 */
?? ??? ??? ??? ?/* 文件讀寫(xiě)操作等... */
?? ??? ??? ?}
?? ??? ??? ?s = CH376DirInfoRead( );? /* 讀取當(dāng)前文件的目錄信息FAT_DIR_INFO,將相關(guān)數(shù)據(jù)調(diào)到內(nèi)存中 */
?? ??? ?}
?? ??? ?CH376FileClose( FALSE );? /* 關(guān)閉文件 */
?? ?}
?? ?return( s );
}


哪一步出錯(cuò)?返回值多少?DirInfo可以讀到嗎??

另外,頭文件不要修改。


這個(gè)網(wǎng)站很蛋疼,好不容易寫(xiě)好了,又要重新登錄,好累耶這樣,這是特性還是bug啊,求解釋。。。。以后每次寫(xiě)少點(diǎn)好了


返回值都沒(méi)有問(wèn)題,為0x14,頭文件我只修改了時(shí)間,應(yīng)該沒(méi)關(guān)系,然而修改那里并沒(méi)有用,那個(gè)宏怎么找都找不到哪里用到了,使用編譯器工具查找發(fā)現(xiàn),時(shí)間的這個(gè)宏并沒(méi)有用上


我描述一下我的理解

首先使用 CH376DirInfoRead( ),CH376得到指令后將屬性信息放入該芯片內(nèi)部緩存區(qū),然后返操作成功的指令,接著使用CH376WriteOfsBlock( buf, STRUCT_OFFSET( FAT_DIR_INFO, DIR_CrtTime ), 2 )函數(shù),將buf內(nèi)的數(shù)據(jù)寫(xiě)進(jìn)對(duì)應(yīng)緩存區(qū)的偏移地址,編譯地址用宏 STRUCT_OFFSET( FAT_DIR_INFO, DIR_CrtTime )得到應(yīng)該是CH376內(nèi)部的緩存區(qū)數(shù)據(jù)格式與結(jié)構(gòu)體FAT_DIR_INFO的結(jié)構(gòu)是一致的,然后寫(xiě)CH376DirInfoSave( )指令,CH376將緩存區(qū)內(nèi)的數(shù)據(jù)寫(xiě)進(jìn)文件,然后等待返回參數(shù),此時(shí)一個(gè)流程的操作完畢

這次聰明了,先復(fù)制在提交,果然要重登。。。


這樣操作一遍的話,按理來(lái)說(shuō)應(yīng)該可以修改文件創(chuàng)建的時(shí)間,在論壇里找了找,對(duì)于時(shí)間好像都沒(méi)遇到什么問(wèn)題,關(guān)于這類問(wèn)題的解決也沒(méi)有找到,可能是我的代碼具體哪里還是出錯(cuò)了


急求解決,如果解決我一定會(huì)在帖子里回復(fù)已解決,希望這個(gè)帖子不要沉?。?!各位大大前輩們,麻煩幫幫忙吧,這是產(chǎn)品設(shè)計(jì)的缺陷啊,而且這個(gè)缺陷很明顯,不可以有


注意文件中修改時(shí)間與創(chuàng)建時(shí)間的區(qū)別,查看文件屬性。

修改時(shí)間屬性,不是通過(guò)頭文件修改的。


抱歉各位,久等了,繼續(xù)該帖,前幾天在整理代碼,同時(shí)還要上課,可能并不會(huì)持續(xù)登錄這里,更重要的是并沒(méi)有什么調(diào)試的頭緒,所以只能暫時(shí)擱淺了,希望各位可以提出各種調(diào)試的方式,我會(huì)一一嘗試的




多謝 jie 回復(fù),之前我并不知道修改頭文件沒(méi)什么用,我只是根據(jù)頭文件中的注釋來(lái)進(jìn)行操作,后來(lái)仔細(xì)查看才發(fā)現(xiàn),頭文件關(guān)于設(shè)置創(chuàng)建時(shí)間的宏根本沒(méi)有用上,可能是需要結(jié)合自己編寫(xiě)代碼去實(shí)現(xiàn)


還是關(guān)于修改時(shí)間和創(chuàng)建時(shí)間的問(wèn)題,根據(jù)參考文檔里面及例程,所用的函數(shù)都是修改文件的創(chuàng)建時(shí)間,如果文件根本沒(méi)有創(chuàng)建時(shí)間,修改可以成功嗎?可為什么函數(shù)返回的值時(shí)0x14


用庫(kù)創(chuàng)建的文件默認(rèn)情況下,是只有修改時(shí)間的(2004-),創(chuàng)建時(shí)間未填寫(xiě)。但是表項(xiàng)是存在的,所以一定是可以修改的。所有函數(shù)的執(zhí)行結(jié)果都是0x14嗎(包括CH376DirInfoRead、CH376DirInfoSave),CH376DirInfoRead之后,是可以把32字節(jié)表項(xiàng)全部讀出來(lái)的,你讀讀看,能否讀出?


不對(duì),我直接在函數(shù)里進(jìn)行打印,像這樣
UINT8?? ?SetFileCreateTime( PUINT8 iFileName, UINT16 iCreateDate, UINT16 iCreateTime )
{
?? ?UINT8?? ?s;
?? ?
?? ?printf("iFileName : %s\r\n", iFileName);
?? ?s = CH376FileOpen( iFileName );? /* 打開(kāi)文件 */
?? ?if ( s == USB_INT_SUCCESS ) {
?? ??? ?/* 文件讀寫(xiě)操作等... */
?? ??? ?s = CH376DirInfoRead( );? /* 讀取當(dāng)前文件的目錄信息FAT_DIR_INFO,將相關(guān)數(shù)據(jù)調(diào)到內(nèi)存中 */
?? ??? ?printf("CH376DirInfoRead: %d\r\n",s);
?//? ???? s = CH376ReadBlock( buf );????????????????????????????????????????????????? /* 讀取枚舉到的文件的FAT_DIR_INFO結(jié)構(gòu),返回長(zhǎng)度總是sizeof( FAT_DIR_INFO ) */
// ? ???? pDir = (P_FAT_DIR_INFO)buf;
?? ????
// ? ???? printf("CH376ReadBlock: %d\r\n",s);
?? ????
?//? ???? printf("DIR_CrtTime :%x\r\n",pDir->DIR_CrtTime);
// ? ???? printf("DIR_WrtTime :%x\r\n",pDir->DIR_WrtTime);
?? ??? ?
?? ??? ?if ( s == USB_INT_SUCCESS ) {
?? ??? ??? ?buf[0] = (UINT8)iCreateTime;? /* 文件創(chuàng)建的時(shí)間,低8位在前 */
?? ??? ??? ?buf[1] = (UINT8)(iCreateTime>>8);? /* 文件創(chuàng)建的時(shí)間,高8位在后 */
?? ??? ??? ?CH376WriteOfsBlock( buf, STRUCT_OFFSET( FAT_DIR_INFO, DIR_CrtTime ), 2 );? /* 向內(nèi)部緩沖區(qū)偏移地址DIR_CrtTime寫(xiě)入2個(gè)字節(jié) */
?? ??? ??? ?buf[0] = (UINT8)iCreateDate;? /* 文件創(chuàng)建的日期,低8位在前 */
?? ??? ??? ?buf[1] = (UINT8)(iCreateDate>>8);? /* 文件創(chuàng)建的日期,高8位在后 */
?? ??? ??? ?CH376WriteOfsBlock( buf, STRUCT_OFFSET( FAT_DIR_INFO, DIR_CrtDate ), 2 );? /* 向內(nèi)部緩沖區(qū)偏移地址DIR_CrtDate寫(xiě)入2個(gè)字節(jié) */
?? ??? ??? ?s = CH376DirInfoSave( );? /* 保存文件的目錄信息 */
?? ??? ??? ?if ( s == USB_INT_SUCCESS ) {? /* 成功修改并保存 */
?? ??? ??? ??? ?/* 文件讀寫(xiě)操作等... */
?? ??? ??? ?}
?? ??? ??? ?//s = CH376DirInfoRead( );? /* 讀取當(dāng)前文件的目錄信息FAT_DIR_INFO,將相關(guān)數(shù)據(jù)調(diào)到內(nèi)存中 */
?? ??? ?}
?? ??? ?CH376FileClose( FALSE );? /* 關(guān)閉文件 */
?? ?}
?? ?return( s );
}


上面我就直接貼代碼了,發(fā)現(xiàn)問(wèn)題:

CH376DirInfoRead()返回的值實(shí)際上是0x20,但是如果根據(jù)函數(shù)的邏輯,進(jìn)行s = CH376DirInfoRead( );操作后并不會(huì)在對(duì)s進(jìn)行賦值了的,因此函數(shù)返回的值應(yīng)該是0x20,但實(shí)際上,整個(gè)SetFileCreateTime函數(shù)放回的值卻是0x14,期間s=0x20時(shí)并不會(huì)進(jìn)入if語(yǔ)句,這是為何?



?s = SetFileCreateTime(TarName,? MAKE_FILE_DATE(2017 , 12, 14),MAKE_FILE_TIME(20,8,0) );
?printf("Modify_Fil_Creat_time is %02X\r\n",s);

調(diào)用后返回的值卻是0x14


噢,搞錯(cuò),打印格式錯(cuò)了,直接打印整型了,,16進(jìn)制應(yīng)該就是0x14,這樣就更不知道問(wèn)題了


?? ???? s = CH376DirInfoRead( );?
?? ??? ?printf("CH376DirInfoRead: %x\r\n",s);
?? ??? ?
?? ??? ?s = CH376ReadBlock( buf );???
?? ??? ?pDir = (P_FAT_DIR_INFO)buf;
?? ??? ?
?? ??? ?printf("CH376ReadBlock: %x\r\n",s);
?? ??? ?
?? ??? ?printf("DIR_CrtTime :%x\r\n",pDir->DIR_CrtTime);
?? ??? ?printf("DIR_WrtTime :%x\r\n",pDir->DIR_WrtTime);


CH376DirInfoRead()返回的值是0x14

CH376ReadBlock()返回的值是0x20


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频