求助大蝦關(guān)于U盤讀寫問題??附源程序

我的程序是用AVR讀U盤里的文件,并把它復(fù)制為U盤里的新建文件 strcpy( (char *)mCmdParam.Open.mPathName, "/A.TXT" ); /* 文件名,該文件在C51子目錄下 */ i = CH375FileOpen( ); /* 打開文件 */ mStopIfError( i ); mCmdParam.ByteRead.mByteCount=MAX_BYTE_IO; i=CH375ByteRead( );/* 以字節(jié)為單位從文件讀出數(shù)據(jù)塊 */ mStopIfError( i ); for(i=0;i tempbuffer[i]=mCmdParam.ByteWrite.mByteBuffer[i]; } i = CH375FileClose( ); /* 關(guān)閉文件 */ mStopIfError( i ); strcpy( (char *)mCmdParam.Create.mPathName, "/NEW.TXT" ); i = CH375FileCreate( ); mStopIfError( i ); mCmdParam.ByteWrite.mByteCount=sizeof(tempbuffer); for(i=0;i mCmdParam.ByteWrite.mByteBuffer[i]=tempbuffer[i]; }

i = CH375ByteWrite( ); mStopIfError( i ); mCmdParam.Close.mUpdateLen = 1; if(mCmdParam.ByteRead.mByteCount }

問題是我的程序執(zhí)行到后,新建文件里沒有A.TXT的字符??不知道那個地方有錯,還請各位大蝦多多幫助。


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

for(i=0;imCmdParam.ByteWrite.mByteBuffer=tempbuffer; } 這樣賦值好象不對吧?目的和作用是什么? 另外還好關(guān)閉文件以自動更新文件長度才可以.


strcpy( (char *)mCmdParam.Open.mPathName, "/A.TXT" ); i = CH375FileOpen( ); /* 打開文件 */ mStopIfError( i ); mCmdParam.ByteRead.mByteCount=MAX_BYTE_IO; i=CH375ByteRead( );/* 以字節(jié)為單位從文件讀出數(shù)據(jù)塊 */ mStopIfError( i ); for(i=0;itempbuffer[i]=mCmdParam.ByteWrite.mByteBuffer[i]; } i = CH375FileClose( ); /* 關(guān)閉文件 */ mStopIfError( i ); 不好意思,剛才打錯了。這一段程序是把A.TXT的文件讀到的數(shù)據(jù)存到tempbuffer里,tempbuffer是一個數(shù)組。這段程序沒有錯,我查看tempbuffer里的字符,是和我A.TXT里一樣的


strcpy( (char *)mCmdParam.Create.mPathName, "/NEW.TXT" ); i = CH375FileCreate( ); mStopIfError( i ); mCmdParam.ByteWrite.mByteCount=sizeof(tempbuffer); for(i=0;imCmdParam.ByteWrite.mByteBuffer[i]=tempbuffer[i]; }

i = CH375ByteWrite( ); mStopIfError( i );

程序執(zhí)行到這里,發(fā)現(xiàn)NEW.TXT里什么都沒有


(1)你在mCmdParam.ByteWrite.mByteBuffer賦值后,用串口將mCmdParam.ByteWrite.mByteBuffer里的數(shù)據(jù)打印出來,監(jiān)視下mByteBuffe中是不是你需要寫入的數(shù)據(jù). (2)你的mByteBuffer賦值方式是不是需要修改下: (3)sizeof(tempbuffer)是tempbuffer的存儲空間的大小,未必是你寫入的數(shù)據(jù)的長度.這點(diǎn)你需要控制下,最好先直接指定寫入的長度mCmdParam.ByteWrite.mByteCount=Len試驗(yàn)下. (4)在寫文件結(jié)束后需要更新文件長度和關(guān)閉文件.


你要去更新文件長度.現(xiàn)在你可以看一下文件長度是多少.可能是1.所以沒有什么數(shù)據(jù).但是不代表數(shù)據(jù)沒有寫進(jìn)去.你可以用WINHEX看看數(shù)據(jù)區(qū)有沒有數(shù)據(jù).


那你就看看 你要寫的數(shù)據(jù) 有沒有 寫到 mCmdParam.ByteWrite.mByteBuffer 里面 以及mCmdParam.ByteWrite.mByteCount 數(shù)值是否正確,關(guān)閉文件有沒有更新文件長度?


謝謝各位了,我按照大家的試試


是必須關(guān)閉文件,文件長度才能更新。這個問題解決,謝謝大家 不過現(xiàn)在的問題是,我如果想接下來把所有源文件的數(shù)據(jù)復(fù)制下來,是不是要重復(fù)執(zhí)行程序 strcpy( (char *)mCmdParam.Open.mPathName, "/A.TXT" ); i = CH375FileOpen( ); /* 打開文件 */ mStopIfError( i ); mCmdParam.ByteRead.mByteCount=MAX_BYTE_IO; i=CH375ByteRead( );/* 以字節(jié)為單位從文件讀出數(shù)據(jù)塊 */ mStopIfError( i ); for(i=0;itempbuffer=mCmdParam.ByteWrite.mByteBuffer; } i = CH375FileClose( ); /* 關(guān)閉文件 */ mStopIfError( i );

這樣我讀到的數(shù)據(jù)是接著上次讀到的數(shù)據(jù)嗎?


不需要每次都打開文件,打開文件只需要一次,然后不斷的讀取數(shù)據(jù)就可以讀取到文件里面的所有內(nèi)容。


每次重新打開文件,文件讀指針總是指向文件頭,我們的庫支持多文件操作,你是想實(shí)現(xiàn)從一個文件讀數(shù)據(jù)寫入另一個文件,即文件拷貝么?參考這個例程:UploadImages/200911251385952.rar


對呀,是文件的拷貝。 謝謝這位的資料,我好好看看,謝謝了


如果每次從源文件讀取數(shù)據(jù),然后存在另一個文件里,一直到文件結(jié)束。我該怎么做呢?


樓上SCM的程序我用過,可是我每次只能復(fù)制1K數(shù)據(jù)


那就把緩沖區(qū)開大一些.如果沒有這么大的緩沖,那就沒辦法了.


1、“如果每次從源文件讀取數(shù)據(jù),然后存在另一個文件里,一直到文件結(jié)束”,程序中已經(jīng)體現(xiàn)了,mReadOver就是結(jié)束標(biāo)志。 2、拷貝的過程,本來就是讀一部分?jǐn)?shù)據(jù),再寫一部分?jǐn)?shù)據(jù),例程中每次只讀寫2個扇區(qū),如果你的RAM有空余,那么把FILE_DATA_BUF設(shè)大一些,多讀幾個扇區(qū)就可以了


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

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