文件枚舉的問題? 請教大蝦們!

for(j=3;j>0;j--) { mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, "/DCIM/1000LYMP" ); i= CH375FileOpen( ); i= mCopyCodeStringToIRAM( mCmdParam.Enumer.mPathName, "P*" ); // j = strlen( mCmdParam.Enumer.mPathName ); /* 計算文件名長度,指向結(jié)束符 */ mCmdParam.Enumer.mPathName[j] = 0xff; /* 將結(jié)束符替換為255 說明序號在變量中 */ CH375vFileSize = j; /* 指定搜索的序號,幾乎沒有上限 */ i=CH375FileEnumer( ); /* 文件名中含有通配符*,枚舉/搜索文件而不打開 */ LED_WR_INACT( ); /* 寫操作 */ i = RenameFileName( ); mStopIfError( i );

} // 程序的目的:是查找"/DCIM/1000LYMP/下面的P開頭的前3個文件 并改名 (改名部分沒有問題 ,直接輸入路徑 可以改名)

這段有錯誤嗎? 為什么執(zhí)行到這里就出錯啊/ 求高手幫忙啊! 看看 1[Emot]1[/Emot][Emot]1[/Emot][Emot]1[/Emot]


熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

哪一步出錯(open 還是 enumer),出錯代碼是多少?


變量j的使用上混亂了,既做記數(shù),有做文件的搜索的序號。


應(yīng)該是enumer.因為執(zhí)行到LED_WR_INACT( ); /* 寫操作 */ 以后出錯的. ]

luoye268268 { M } ::變量j的使用上混亂了,既做記數(shù),有做文件的搜索的序號。 應(yīng)該沒有錯吧.當(dāng)開始J=3 我修改第3個符合條件的.=2 修改第二個.......有錯嗎

另幫看看其他還有錯誤嗎.或用其他的方法可以嗎 .?


j = strlen( mCmdParam.Enumer.mPathName ); /* 計算文件名長度,指向結(jié)束符 */ 該句改變了j的值,j 始終為2,也即枚舉序號始終為2


j = strlen( mCmdParam.Enumer.mPathName ); //j變?yōu)? mCmdParam.Enumer.mPathName[j] = 0xff; CH375vFileSize = j; j=2 返回for循環(huán)的話,j此時已經(jīng)是2了。也就是for循環(huán)程序中用到了循環(huán)的條件變量j了,所以我說混亂了。 這個錯誤并不是引起你后面出錯的原因。

是這樣的,先打開文件夾再枚舉(CH375FileEnumer),枚舉成功返回的只是打開目錄下的文件名,并不是帶目錄路徑的完整的路徑名,你再在下面調(diào)用的RenameFileName函數(shù)去打開文件的話,由于前面的并不是完整的路徑名,在RenameFileName函數(shù)中肯定不能打開這個文件的。 你可以試一下在RenameFileName之前,再調(diào)用一下 mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, "/DCIM/1000LYMP" ); i= CH375FileOpen( ); 先打開目錄/DCIM/1000LYMP,再接下去的RenameFileName之前,還得將mCmdParam.Open.mPathName緩沖區(qū)中存放的非完整的路徑名中的“/”去掉。

簡單的方法就是,不要先打開目錄再在目錄下枚舉,而是直接將目錄路徑加到枚舉文件名中去,即將i= mCopyCodeStringToIRAM( mCmdParam.Enumer.mPathName, "P*" ); 改給i= mCopyCodeStringToIRAM( mCmdParam.Enumer.mPathName, "/DCIM/1000LYMP/P*" );


還是不行啊.主程序如下: main( ) { UINT8 i,j; PZ_OFF(); GZP_OFF(); KZ_OFF(); CH375_PORT_INIT( ); /* 由于使用通用I/O模塊并口讀寫時序,所以進行初始化 */ LED_OUT_INIT( ); LED_OUT_ACT( ); /* 開機后LED亮一下以示工作 */ mDelay100mS( ); /* 延時100毫秒 */ LED_OUT_INACT( ); mInitSTDIO( ); /* 為了讓計算機通過串口監(jiān)控演示過程 */ i = CH375LibInit( ); /* 初始化CH375程序庫和CH375芯片,操作成功返回0 */ mStopIfError( i ); /* 其它電路初始化 */ while ( 1 ) { // if(P1_2==0) // { Paizhao(); GZP_ON(); mDelay100mS( ); while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 */ LED_OUT_ACT( ); /* LED亮 */ /* 檢查U盤是否準備好,有些U盤不需要這一步,但是某些U盤必須要執(zhí)行這一步才能工作 */ for ( i = 0; i < 5; i ++ ) { /* 有的U盤總是返回未準備好,不過可以被忽略 */ mDelay100mS( ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查詢磁盤是否準備好 */ } for(j=3;j>0;j--) { LED_RUN_ACT( ); /* 開始操作U盤 */ /* 如果MY_ADC.TXT文件已經(jīng)存在則添加數(shù)據(jù)到尾部,如果不存在則新建文件 */ mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, "/SUNG.TXT" ); /* 文件名,該文件在根目錄下 */ i = CH375FileOpen( ); /* 打開文件 */ if ( i == ERR_SUCCESS ) { /* 文件存在并且已經(jīng)被打開,移動文件指針到尾部以便添加數(shù)據(jù) */ mCmdParam.ByteLocate.mByteOffset = 0xffffffff; /* 移到文件的尾部 */ i = CH375ByteLocate( ); mStopIfError( i ); } else if ( i == ERR_MISS_FILE ) { /* 沒有找到文件,必須新建文件 */ mCopyCodeStringToIRAM( mCmdParam.Create.mPathName, "/SUNG.TXT" ); /* 文件名,該文件在根目錄下,剛才已經(jīng)提供給CH375FileOpen */ i = CH375FileCreate( ); /* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */ mStopIfError( i ); } else mStopIfError( i ); /* 打開文件時出錯 */ LED_WR_ACT( ); /* 寫操作 */ i = sprintf( mCmdParam.ByteWrite.mByteBuffer, "此前文件長度= %ld 字節(jié)\xd\xa", CH375vFileSize ); LED_WR_INACT( ); mDelay100mS( ); LED_WR_ACT( ); mCmdParam.ByteWrite.mByteCount = i; /* 指定本次寫入的字節(jié)數(shù),單次讀寫的長度不能超過MAX_BYTE_IO */ i = CH375ByteWrite( ); /* 以字節(jié)為單位向文件寫入數(shù)據(jù),單次讀寫的長度不能超過MAX_BYTE_IO */ mStopIfError( i ); mCmdParam.Close.mUpdateLen = 1; /* 自動計算文件長度,以字節(jié)為單位寫文件,建議讓程序庫關(guān)閉文件以便自動更新文件長度 */ i = CH375FileClose( ); /* 關(guān)閉文件 */ i= mCopyCodeStringToIRAM( mCmdParam.Enumer.mPathName, "/DCIM/1000LYMP/P*" ); i = strlen( mCmdParam.Enumer.mPathName ); /* 計算文件名長度,指向結(jié)束符 */ mCmdParam.Enumer.mPathName[i] = 0xff; /* 將結(jié)束符替換為255 說明序號在變量中 */ CH375vFileSize = j; /* 指定搜索的序號,幾乎沒有上限 */ i=CH375FileEnumer( ); /* 文件名中含有通配符*,枚舉/搜索文件而不打開 */ LED_WR_INACT( ); /* 寫操作 */ // mStopIfError( i ); i = RenameFileName( ); /* 修改文件名, C文件 => TXT文件 */ LED_WR_INACT( ); LED_RUN_INACT( ); } GZP_OFF(); while ( CH375DiskStatus != DISK_DISCONNECT ) xQueryInterrupt( ); /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤拔出 */ LED_OUT_INACT( ); /* LED滅 */

} }

前面的 對SUNG.TXT 的操作是正確的。 寫了3次內(nèi)容.但沒有改名部分沒有執(zhí)行. 測試 i= mCopyCodeStringToIRAM( mCmdParam.Enumer.mPathName, "/DCIM/1000LYMP/P8140844.JPG" ); i = RenameFileName( ); 這樣不能執(zhí)行改名.但先進入目錄/DCIM 在改名 就可以. 那應(yīng)該怎么做啊.

目的 :就是把符合條件的"/DCIM/1000LYMP 目錄下的3個文件改名.


怎么沒人 回答啊!


在 i = RenameFileName( ); 添加i = CH375FileOpen(); 看看是否能夠打開枚舉到的文件

建議你看一下是哪一部出錯,出錯代碼是什么


其中count定義:unsigned int count

for(count=0;count<3;count++){ /* 如果MY_ADC.TXT文件已經(jīng)存在則添加數(shù)據(jù)到尾部,如果不存在則新建文件 */ mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, "/SUNG.TXT" ); /* 文件名,該文件在根目錄下 */ i = CH375FileOpen( ); /* 打開文件 */ if ( i == ERR_SUCCESS ) { /* 文件存在并且已經(jīng)被打開,移動文件指針到尾部以便添加數(shù)據(jù) */ mCmdParam.ByteLocate.mByteOffset = 0xffffffff; /* 移到文件的尾部 */ i = CH375ByteLocate( ); mStopIfError( i ); } else if ( i == ERR_MISS_FILE ) { /* 沒有找到文件,必須新建文件 */ mCopyCodeStringToIRAM( mCmdParam.Create.mPathName, "/SUNG.TXT" ); /* 文件名,該文件在根目錄下,剛才已經(jīng)提供給CH375FileOpen */ i = CH375FileCreate( ); /* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */ mStopIfError( i ); } else mStopIfError( i ); /* 打開文件時出錯 */ LED_WR_ACT( ); /* 寫操作 */ i = sprintf( mCmdParam.ByteWrite.mByteBuffer, "此前文件長度= %ld 字節(jié)\xd\xa", CH375vFileSize ); LED_WR_INACT( ); mDelaymS( 100 ); LED_WR_ACT( ); mCmdParam.ByteWrite.mByteCount = i; /* 指定本次寫入的字節(jié)數(shù),單次讀寫的長度不能超過MAX_BYTE_IO */ i = CH375ByteWrite( ); /* 以字節(jié)為單位向文件寫入數(shù)據(jù),單次讀寫的長度不能超過MAX_BYTE_IO */ mStopIfError( i ); mCmdParam.Close.mUpdateLen = 1; /* 自動計算文件長度,以字節(jié)為單位寫文件,建議讓程序庫關(guān)閉文件以便自動更新文件長度 */ i = CH375FileClose( ); /* 關(guān)閉文件 */

printf("enum\n"); strcpy( mCmdParam.Enumer.mPathName, "/DCIM/1000LYMP/P*" ); /* 在根目錄下搜索所有文件名 */ i = strlen( mCmdParam.Enumer.mPathName ); /* 計算文件名長度,指向結(jié)束符 */ mCmdParam.Enumer.mPathName[i] = 0xFF; /* 將結(jié)束符替換為255 說明序號在變量中 */ CH375vFileSize = count; /* 指定搜索的序號,幾乎沒有上限 */ i=CH375FileEnumer( ); /* 文件名中含有通配符*,枚舉/搜索文件而不打開 */ if ( i==ERR_MISS_FILE ) break; /* 再也搜索不到匹配文件,已經(jīng)沒有匹配的文件名 */ if ( i!=ERR_SUCCESS ) break; /* 出錯 */ printf( "found name %d#: %s\n", count, mCmdParam.Enumer.mPathName ); /* 搜索到相匹配的文件名,顯示序號和搜索到的匹配文件名或者子目錄名 */ if ( CH375vFileSize!=0xFFFFFFFF ) printf( "this is a file\n" ); /* 枚舉到文件 */ else printf( "this is a directory\n" ); /* 枚舉到子目錄 */

i = RenameFileName( ); /* 修改文件名, C文件 => TXT文件 */

}


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

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