程序理解幫忙!

i = CH375FileCreate( ); /* 以創(chuàng)建文件的方法創(chuàng)建目錄 */ if ( i == ERR_SUCCESS ) { // if ( &FILE_DATA_BUF[0] == &DISK_BASE_BUF[0] ) CH375DirtyBuffer( ); /* 如果FILE_DATA_BUF與DISK_BASE_BUF合用則必須清除磁盤緩沖區(qū) */ DirXramBuf = &FILE_DATA_BUF[0]; /* 文件數(shù)據(jù)緩沖區(qū) */ DirConstData = ". \x10\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x21\x30\x0\x0\x0\x0\x0\x0.. \x10\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x21\x30\x0\x0\x0\x0\x0\x0"; for ( i = 0x40; i != 0; i -- ) { /* 目錄的保留單元,分別指向自身和上級目錄 */ *DirXramBuf = *DirConstData; DirXramBuf ++; DirConstData ++; } FILE_DATA_BUF[0x1A] = (UINT8)CH375vStartCluster; /* 自身的起始簇號 */ FILE_DATA_BUF[0x1B] = (UINT8)(CH375vStartCluster>>8); FILE_DATA_BUF[0x14] = (UINT8)(CH375vStartCluster>>16); FILE_DATA_BUF[0x15] = (UINT8)(CH375vStartCluster>>24); FILE_DATA_BUF[0x20+0x1A] = (UINT8)UpDirCluster; /* 上級目錄的起始簇號 */ FILE_DATA_BUF[0x20+0x1B] = (UINT8)(UpDirCluster>>8); FILE_DATA_BUF[0x20+0x14] = (UINT8)(UpDirCluster>>16); FILE_DATA_BUF[0x20+0x15] = (UINT8)(UpDirCluster>>24); for ( i = 0xE0; i != 0; i -- ) { /* 清空目錄區(qū)剩余部分 */ *DirXramBuf = 0; DirXramBuf ++; } for ( i = 0xE0; i != 0; i -- ) { /* 清空目錄區(qū)剩余部分 */ *DirXramBuf = 0; DirXramBuf ++; } mCmdParam.Write.mSectorCount = 1; i = CH375FileWrite( ); /* 寫目錄的第一個扇區(qū) */ if ( i == ERR_SUCCESS ) { DirXramBuf = &FILE_DATA_BUF[0]; for ( i = 0x40; i != 0; i -- ) { /* 清空目錄區(qū) */ *DirXramBuf = 0; DirXramBuf ++; } for ( j = 1; j != CH375vSecPerClus; j ++ ) { // if ( &FILE_DATA_BUF[0] == &DISK_BASE_BUF[0] ) CH375DirtyBuffer( ); /* 如果FILE_DATA_BUF與DISK_BASE_BUF合用則必須清除磁盤緩沖區(qū) */ mCmdParam.Write.mSectorCount = 1; i = CH375FileWrite( ); /* 清空目錄的剩余扇區(qū) */ if ( i != ERR_SUCCESS ) break; } 能不能具體分析一下,上面這段程序的作用,一直看不是很懂,謝謝!

這個就是寫一個扇區(qū)的.要是詳細了解的話必須看以下文件系統(tǒng)的相關(guān)知識. 文件路徑的要記錄下上級目錄的相關(guān)信息,本目錄的相關(guān)信息,主要就是起始簇號.程序中: DirConstData = ". \x10\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x21\x30\x0\x0\x0\x0\x0\x0.. \x10\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x21\x30\x0\x0\x0\x0\x0\x0"; for ( i = 0x40; i != 0; i -- ) { /* 目錄的保留單元,分別指向自身和上級目錄 */ *DirXramBuf = *DirConstData; DirXramBuf ++; DirConstData ++; } FILE_DATA_BUF[0x1A] = (UINT8)CH375vStartCluster; /* 自身的起始簇號 */ FILE_DATA_BUF[0x1B] = (UINT8)(CH375vStartCluster>>8); FILE_DATA_BUF[0x14] = (UINT8)(CH375vStartCluster>>16); FILE_DATA_BUF[0x15] = (UINT8)(CH375vStartCluster>>24); FILE_DATA_BUF[0x20+0x1A] = (UINT8)UpDirCluster; /* 上級目錄的起始簇號 */ FILE_DATA_BUF[0x20+0x1B] = (UINT8)(UpDirCluster>>8); FILE_DATA_BUF[0x20+0x14] = (UINT8)(UpDirCluster>>16); FILE_DATA_BUF[0x20+0x15] = (UINT8)(UpDirCluster>>24); 這個信息表是以0X2E,和0X2EX0X2E來表示的,反映到ASIC碼上就是.和.. 你可以看到DirConstData 里面有.和.. 兩個地方,然后把簇號和起始簇號分別寫到文件緩沖區(qū)里面,把數(shù)據(jù)寫到目錄的第一個扇區(qū)里面,然后把文件的相關(guān)屬性修改為0X10就可以了.


1.把數(shù)據(jù)寫到目錄的第一個扇區(qū)里面。你指的數(shù)據(jù)是不是前面保存到文件緩沖區(qū)里的簇號和起始簇號? 2.我的程序出現(xiàn)這樣一種現(xiàn)象:第一次創(chuàng)建目錄可以成功,第二次創(chuàng)建不管創(chuàng)建在哪里,文件的屬性都不是文件夾?請問這是為什么?


是的,為了方便你調(diào)試和解決你所遇到的問題,你可以看一下你在U盤里到底寫了什么數(shù)據(jù),分析出錯誤數(shù)據(jù)才能找到原因.你用WINHEX軟件就可以看到.你可以把U盤格式化好后,新建一個文件夾,看看數(shù)據(jù)是怎么回事.然后在文件夾下面在建一個文件夾.看看數(shù)據(jù)是怎么安排的就明白了.你看看你修改后的文件屬性是否被寫到其他地方了


我在文件夾下面再建文件夾的格式并不是文件夾,但我往這個文件夾里新建TXT后就變成文件夾了 搞不明白,是不是哪里沒有操作完成?


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

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