亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fat.c

?? SD卡調試所用的資料
?? C
?? 第 1 頁 / 共 4 頁
字號:
 - 隸屬模塊:FAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:dName:指向文件目錄項的文件名字段的指針
             pName:指向轉換完成后的文件名
 - 返回說明:無
 - 注:此函數配合上面的FilenameMatch函數,就可以實現對文件名通配匹配
 ***********************************************************************/

void FAT32_toFileName(char *dName,char *pName)
{
 char i=7,j=0,k=0;
 while(dName[i--]==' ');
 for(j=0;j<i+2;j++) pName[j]=L2U(dName[j]);
 pName[j++]='.';
 i=10;
 while(dName[i--]==' ');
 k=j+i-6;
 i=0;
 for(;j<k;j++) pName[j]=dName[8+(i++)];
 pName[j]=0; 
}

/***********************************************************************
 - 功能描述:將字符串中的小寫字符都轉為大寫字符
 - 隸屬模塊:FAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:str:指向待轉換的字符串
 - 返回說明:無
 - 注:短文件名的情況下,文件名中的字符其實都是大寫字符,為了方便,將文件
       名都轉為大寫
 ***********************************************************************/

void Str2Up(char *str)
{
 unsigned char len=strlen(str),i;
 for(i=0;i<len;i++)
 {
  str[i]=L2U(str[i]); 
 } 
}

/**************************************************************************
 - 功能描述:進入一個目錄
 - 隸屬模塊:FAT文件系統模塊
 - 函數屬性:外部,使用戶使用
 - 參數說明:path:目錄的路徑 形如:"\\dir1\\dir2\\" ,最后一定是以\\結束 
 - 返回說明:返回目錄的開始簇號,如果進入目錄失敗,比如目錄不存在,則返回0
 - 注:此函數由后面的FAT32_Open_File等函數調用,用來實現打開任意目錄下的文件
       不建議用戶調用
 **************************************************************************/

UINT32 FAT32_Enter_Dir(INT8 *path)
{
 UINT32 Cur_Clust,sec_temp,iSec,iDir,Old_Clust;
 UINT8 i=1,counter=0,flag=0;
 struct direntry *pDir;
 INT8 name[20];

 Cur_Clust=pArg->FirstDirClust;
 if(path[1]==0 && path[0]=='\\') return Cur_Clust;
 else
 {
  while(path[i]!=0)
  {
   if(path[i]=='\\')
   {
    for(;counter<8;counter++)
	{
	 name[counter]=' ';
	}
	name[counter]=0;
	counter=0;
	
	do
	{
	 sec_temp=(SOC(Cur_Clust));
	 for(iSec=sec_temp;iSec<sec_temp+pArg->SectorsPerClust;iSec++)
	 {
	  FAT32_ReadSector(iSec,FAT32_Buffer);
	  for(iDir=0;iDir<pArg->BytesPerSector;iDir+=sizeof(struct direntry))
      {
       pDir=((struct direntry *)(FAT32_Buffer+iDir));
	   if(Compare_Dir_Name(pDir->deName,name))
	   {
	    flag=1;
		Cur_Clust=LE2BE(pDir->deLowCluster,2)+LE2BE(pDir->deHighClust,2)*65536;
		iDir=pArg->BytesPerSector;
		iSec=sec_temp+pArg->SectorsPerClust;
	   } 
	  }
	 }
	 Old_Clust=Cur_Clust;
	}while(!flag && (Cur_Clust=FAT32_GetNextCluster(Cur_Clust))!=0x0fffffff);
	if(!flag) 
	{
	 temp_dir_cluster=Old_Clust;
	 strcpy(temp_dir_name,name);
	 flag=0;
	 return 0;
	}
	flag=0; 
   }
   else
   {
    name[counter++]=(L2U(path[i]));
   }
   i++;
  }
 }
 name[counter]=0; 
 flag=1;
 temp_dir_cluster=Cur_Clust;
 strcpy(temp_dir_name,name);
 return Cur_Clust;
}

/**************************************************************************
 - 功能描述:打開一個文件(支持文件名通配,如 A*.txt 或 *.*)
 - 隸屬模塊:FAT文件系統模塊
 - 函數屬性:外部,使用戶使用
 - 參數說明:pfi: FileInfoStruct類型的結構體指針,用來裝載文件的參數信息
              比如文件的大小、文件的名稱、文件的開始簇等等,以備后面使用
             filepath: 文件的路徑,支持任意層目錄 比如
              "\\dir1\\dir2\\dir3\\....\\test.txt"
			 item:在文件名中有通配符*或?的情況下,實現與之匹配的文件并非
			 一個,item就是打開的文件的項數,比如符合通配條件的文件有6個,
			 如果item=3,那么此函數就會打開這6個文件中按順序排號為3的那個
			 文件(item編號從0開始)
 - 返回說明:0:成功 1:文件不存在 2:目錄不存在
 - 注:打開文件不成功有很多原因,比如文件不存在、文件的某一級目錄不存在
       通配情況下滿足條件的文件項數小于item的值等等
	   通常情況下,文件名中沒有通配符,item的值我們取0就可以了
 **************************************************************************/

UINT8 FAT32_Open_File(struct FileInfoStruct *pfi,INT8 *filepath,unsigned long item)
{
 UINT32 Cur_Clust,sec_temp,iSec,iFile,iItem=0;
 UINT8 flag=0,index=0,i=0;
 struct direntry *pFile;
 INT8 temp_file_name[13];
 while(filepath[i]!=0)
 {
  if(filepath[i]=='\\') index=i;
  i++;
 }

 if(Cur_Clust=FAT32_Enter_Dir(filepath))
 {
  Str2Up(temp_dir_name);
 do
 { 
  sec_temp=SOC(Cur_Clust);
  for(iSec=sec_temp;iSec<sec_temp+pArg->SectorsPerClust;iSec++)
  {	
   FAT32_ReadSector(iSec,FAT32_Buffer);
   for(iFile=0;iFile<pArg->BytesPerSector;iFile+=sizeof(struct direntry))
   {
    pFile=((struct direntry *)(FAT32_Buffer+iFile));
	FAT32_toFileName(pFile->deName,temp_file_name);
	if(FilenameMatch(temp_dir_name,temp_file_name) && pFile->deName[0]!=0xe5 && pFile->deAttributes&0x20) //匹配文件名
	{
	 if(item==iItem)
	 {	 
	 flag=1;
     Cur_Clust=LE2BE(pFile->deLowCluster,2)+LE2BE(pFile->deHighClust,2)*65536;

     pfi->FileSize=LE2BE(pFile->deFileSize,4);
	 strcpy(pfi->FileName,temp_file_name);
	 pfi->FileStartCluster=LE2BE(pFile->deLowCluster,2)+LE2BE(pFile->deHighClust,2)*65536;
	 pfi->FileCurCluster=pfi->FileStartCluster;
	 pfi->FileCurSector=SOC(pfi->FileStartCluster);
	 pfi->FileCurPos=0;
	 pfi->FileCurOffset=0;
	 pfi->Rec_Sec=iSec;
	 pfi->nRec=iFile;

	 pfi->FileAttr=pFile->deAttributes;
	 sec_temp=LE2BE(pFile->deCTime,2);
	 (pfi->FileCreateTime).sec=(sec_temp&0x001f)*2;
	 (pfi->FileCreateTime).min=((sec_temp>>5)&0x003f);
	 (pfi->FileCreateTime).hour=((sec_temp>>11)&0x001f);
	 sec_temp=LE2BE(pFile->deCDate,2);
	 (pfi->FileCreateDate).day=((sec_temp)&0x001f);
	 (pfi->FileCreateDate).month=((sec_temp>>5)&0x000f);
	 (pfi->FileCreateDate).year=((sec_temp>>9)&0x007f)+1980;

	 sec_temp=LE2BE(pFile->deMTime,2);
	 (pfi->FileMTime).sec=(sec_temp&0x001f)*2;
	 (pfi->FileMTime).min=((sec_temp>>5)&0x003f);
	 (pfi->FileMTime).hour=((sec_temp>>11)&0x001f);
	 sec_temp=LE2BE(pFile->deMDate,2);
	 (pfi->FileMDate).day=((sec_temp)&0x001f);
	 (pfi->FileMDate).month=((sec_temp>>5)&0x000f);
	 (pfi->FileMDate).year=((sec_temp>>9)&0x007f)+1980;

	 sec_temp=LE2BE(pFile->deADate,2);
	 (pfi->FileADate).day=((sec_temp)&0x001f);
	 (pfi->FileADate).month=((sec_temp>>5)&0x000f);
	 (pfi->FileADate).year=((sec_temp>>9)&0x007f)+1980;
	    
	 iFile=pArg->BytesPerSector;
	 iSec=sec_temp+pArg->SectorsPerClust;
	 }
	 else
	 {
	  iItem++;
	 }
	} 
   }
  }
 }while(!flag && (Cur_Clust=FAT32_GetNextCluster(Cur_Clust))!=0x0fffffff);
 if(!flag) 
 {
  return 1;
 }
 return 0;
 }
 else
 {
  return 2; 
 }
}

/**************************************************************************
 - 功能描述:文件定位
 - 隸屬模塊:FAT文件系統模塊
 - 函數屬性:外部,使用戶使用
 - 參數說明:pfi:FileInfoStruct類型的結構體指針,用于裝載文件參數信息,文件
             定位后,pfi所指向的結構體中的相關參數就被更新了,比如文件的當前
             扇區,文件當前扇區中的位置,文件的當前偏移量等等,以備后面使用
             offset:要定位的偏移量,如果offset大于文件的大小,則定位到文件的
             末尾
 - 返回說明:文件定位成功返回0,否則為1
 - 注:此函數被下面的FAT32_Read_File調用,用于實現從指定位置讀取數據,不建議
       用戶直接調用些函數
 **************************************************************************/

UINT8 FAT32_Seek_File(struct FileInfoStruct *pfi,UINT32 offset)
{
 UINT32 i,temp;

if(offset<=pfi->FileSize)
{ 
 if(offset==pfi->FileCurOffset)
 {
  pfi->FileCurPos%=pArg->BytesPerSector;
  return 1;  
 }
 if(offset<pfi->FileCurOffset) 
 {
  pfi->FileCurCluster=pfi->FileStartCluster;
  pfi->FileCurSector=SOC(pfi->FileCurCluster);
  pfi->FileCurPos=0;
  pfi->FileCurOffset=0;
 } 
 if((offset-pfi->FileCurOffset)>=(pArg->BytesPerSector-pfi->FileCurPos))	 //目標偏移量與文件當前偏移量所差的字節數不小于文件在當前扇區中的位置到扇區末尾的字節數
 {
  pfi->FileCurOffset+=(pArg->BytesPerSector-pfi->FileCurPos);
  pfi->FileCurPos=0;
  if(pfi->FileCurSector-SOC(pfi->FileCurCluster)==(pArg->SectorsPerClust-1))
  {
   pfi->FileCurCluster=FAT32_GetNextCluster(pfi->FileCurCluster);
   pfi->FileCurSector=SOC(pfi->FileCurCluster);
  }
  else
  {
   pfi->FileCurSector++; 
  }
 }
 else
 {
  pfi->FileCurPos=(pfi->FileCurPos+offset-pfi->FileCurOffset)%pArg->BytesPerSector;
  pfi->FileCurOffset=offset;
  return 1;
 }
 temp=SOC(pfi->FileCurCluster);
 if((offset-(pfi->FileCurOffset))/pArg->BytesPerSector+(pfi->FileCurSector-temp)>(pArg->SectorsPerClust-1))
 {
  pfi->FileCurOffset+=(((pArg->SectorsPerClust)-(pfi->FileCurSector-(SOC(pfi->FileCurCluster))))*pArg->BytesPerSector);
  pfi->FileCurCluster=FAT32_GetNextCluster(pfi->FileCurCluster);
  pfi->FileCurSector=SOC(pfi->FileCurCluster);
  pfi->FileCurPos=0;
 }
 else
 {
  pfi->FileCurSector+=(offset-pfi->FileCurOffset)/pArg->BytesPerSector;
  pfi->FileCurPos=(offset-pfi->FileCurOffset)%pArg->BytesPerSector;
  pfi->FileCurOffset=offset;
  return 1;
 }

 temp=(offset-pfi->FileCurOffset)/(pArg->BytesPerSector*pArg->SectorsPerClust);
 for(i=0;i<temp;i++)
 {
  pfi->FileCurCluster=FAT32_GetNextCluster(pfi->FileCurCluster);
 }
 pfi->FileCurOffset+=(temp*(pArg->BytesPerSector*pArg->SectorsPerClust));
 pfi->FileCurSector=(SOC(pfi->FileCurCluster))+(offset-pfi->FileCurOffset)/pArg->BytesPerSector;
 pfi->FileCurPos=((offset-pfi->FileCurOffset))%pArg->BytesPerSector;
 pfi->FileCurOffset=offset;
}
else
{
 return 1;
}
 return 0;
}

/**************************************************************************
 - 功能描述:從文件的某一個位置處,讀取一定長度的數據,放入數據緩沖區中
 - 隸屬模塊:FAT文件系統模塊
 - 函數屬性:外部,使用戶使用
 - 參數說明:pfi:FileInfoStruct類型的結構體指針,用于裝載文件參數信息,文件
             讀取的過程中,此結構體中的相關參數會更新,比如文件的當前偏移量、
             文件的當前扇區,文件的當前簇等等
             offset:要定位的偏移量,要小于文件的大小 
             len:要讀取的數據的長度,如果len+offset大于文件的大小,則實際讀
             取的數據量是從offset開始到文件結束
             pbuf:數據緩沖區
 - 返回說明:讀取到的實際的數據長度,如果讀取失敗,比如指定的偏移量大于了文件
             大小,則返回0
 - 注:在讀取一個文件的數據前,必須先將該文件用FAT32_Open_File打開
 **************************************************************************/

UINT32 FAT32_Read_File(struct FileInfoStruct *pfi,UINT32 offset,UINT32 len,UINT8 *pbuf)
{
 UINT32 i,j,k,temp;
 UINT32 counter=0;
 if(offset<pfi->FileSize)
 {
  if(offset+len>pfi->FileSize) len=pfi->FileSize-offset;
  FAT32_Seek_File(pfi,offset);
  
  FAT32_ReadSector(pfi->FileCurSector,FAT32_Buffer);
  for(i=pfi->FileCurPos;i<pArg->BytesPerSector;i++)
  {
   if(counter>=len) 
   {
     return len;
   }
   pbuf[counter]=FAT32_Buffer[i];
   counter++;
   pfi->FileCurPos++;
   pfi->FileCurOffset++;
  }
  if(pfi->FileCurSector-(SOC(pfi->FileCurCluster))!=(pArg->SectorsPerClust-1))
  {
   for(j=pfi->FileCurSector+1;j<(SOC(pfi->FileCurCluster))+pArg->SectorsPerClust;j++)
   {
    FAT32_ReadSector(j,FAT32_Buffer);
    pfi->FileCurSector=j;
    for(i=0;i<pArg->BytesPerSector;i++)
    {
     if(counter>=len)
     {
       return len;
     }
     pbuf[counter]=FAT32_Buffer[i];
     counter++;
     pfi->FileCurPos++;
     pfi->FileCurOffset++;
    }
   }
  } 
  temp=(len-counter)/(pArg->BytesPerSector*pArg->SectorsPerClust);
  for(k=0;k<temp;k++)
  {
   pfi->FileCurCluster=FAT32_GetNextCluster(pfi->FileCurCluster);
   for(j=(SOC(pfi->FileCurCluster));j<(SOC(pfi->FileCurCluster))+pArg->SectorsPerClust;j++)
   {
    FAT32_ReadSector(j,FAT32_Buffer);
    pfi->FileCurSector=j;
    for(i=0;i<pArg->BytesPerSector;i++)
    {
     if(counter>=len)  
 	 {
       return len;
     }
     pbuf[counter]=FAT32_Buffer[i];
     counter++;
     pfi->FileCurOffset++;
	 pfi->FileCurPos++;
	 pfi->FileCurPos%=pArg->BytesPerSector;
    } 
   }    
  }
  pfi->FileCurCluster=FAT32_GetNextCluster(pfi->FileCurCluster);
  temp=(SOC(pfi->FileCurCluster))+((len-counter)/pArg->BytesPerSector);
  pfi->FileCurSector=(SOC(pfi->FileCurCluster));
  for(j=(SOC(pfi->FileCurCluster));j<temp;j++)
  {
   FAT32_ReadSector(j,FAT32_Buffer);
   pfi->FileCurSector=j;
   for(i=0;i<pArg->BytesPerSector;i++)
   {
    if(counter>=len) 
    {
      return len;
    }
    pbuf[counter]=FAT32_Buffer[i];
    counter++;
    pfi->FileCurPos++;
    pfi->FileCurPos%=pArg->BytesPerSector;
    pfi->FileCurOffset++;
   }   
  }
  pfi->FileCurSector=j;
  FAT32_ReadSector(pfi->FileCurSector,FAT32_Buffer);
  temp=len-counter;
  for(i=0;i<temp;i++)
  {
   if(counter>=len) 
   {
     return len;
   }
   pbuf[counter]=FAT32_Buffer[i];
   counter++;
   pfi->FileCurPos++;
   pfi->FileCurPos%=pArg->BytesPerSector;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区电影| 亚洲h在线观看| 日韩综合小视频| 成人午夜精品在线| 日韩精品中文字幕在线不卡尤物| 亚洲摸摸操操av| 国产精品白丝jk黑袜喷水| 欧美日本一道本| 亚洲视频在线一区二区| 国产成人夜色高潮福利影视| 欧美精品一二三四| 亚洲精品成人在线| av成人动漫在线观看| 久久久美女毛片| 国精品**一区二区三区在线蜜桃| 91麻豆精品国产91久久久| 亚洲国产日韩精品| 欧美色爱综合网| 亚洲在线视频免费观看| 色狠狠一区二区三区香蕉| 综合欧美一区二区三区| 95精品视频在线| 亚洲视频一区在线观看| 99久久99久久精品国产片果冻| 国产亚洲福利社区一区| 国产精品综合二区| 国产无一区二区| 成人网在线免费视频| 国产欧美精品一区二区色综合| 精品亚洲aⅴ乱码一区二区三区| 91精品国产一区二区三区| 五月天视频一区| 337p亚洲精品色噜噜| 日韩精品视频网| 日韩精品一区二区三区在线观看| 日本欧美加勒比视频| 欧美一区二区三区在线看| 麻豆国产精品一区二区三区 | 欧美军同video69gay| 亚洲宅男天堂在线观看无病毒| 在线视频一区二区免费| 亚洲一卡二卡三卡四卡五卡| 欧美色爱综合网| 五月激情六月综合| 日韩精品一区二区三区四区 | 老司机精品视频一区二区三区| 欧美一区永久视频免费观看| 老司机精品视频线观看86| 国产午夜亚洲精品午夜鲁丝片| 成人妖精视频yjsp地址| 尤物视频一区二区| 欧美另类高清zo欧美| 韩日av一区二区| 中文字幕制服丝袜一区二区三区 | 国产成人精品影视| 一区二区成人在线视频| 91精品国产综合久久香蕉的特点| 国产一区二区三区黄视频| 综合自拍亚洲综合图不卡区| 欧美剧在线免费观看网站| 国产一区二区三区高清播放| 亚洲日本丝袜连裤袜办公室| 精品视频999| 久久超碰97中文字幕| 亚洲欧美日韩久久| 日韩欧美一区二区不卡| 丁香婷婷综合色啪| 亚洲成人一二三| 日本一区二区三区四区| 欧美日本不卡视频| 国产成人99久久亚洲综合精品| 亚洲宅男天堂在线观看无病毒| 26uuu欧美| 欧美日韩卡一卡二| 成人av电影在线网| 欧美aaaaaa午夜精品| 亚洲男同1069视频| 2017欧美狠狠色| 欧美日韩高清一区二区不卡| 成年人午夜久久久| 韩国成人在线视频| 香蕉成人伊视频在线观看| 国产精品久久99| 精品人在线二区三区| 欧美日韩不卡视频| 91色|porny| 国产黄色91视频| 国内精品视频666| 亚洲二区视频在线| 亚洲日本va午夜在线影院| 久久综合色婷婷| 欧美一级欧美一级在线播放| 色婷婷一区二区三区四区| 福利一区二区在线| 久久精品99国产精品| 日韩精品免费视频人成| 亚洲午夜视频在线观看| 亚洲精品中文字幕在线观看| 国产精品欧美一区二区三区| 久久精品视频在线看| 欧美xxxx老人做受| 欧美一级爆毛片| 欧美精品久久一区| 欧洲人成人精品| 色婷婷综合久久久| 91黄视频在线| 欧美私人免费视频| 欧美视频三区在线播放| 91电影在线观看| 日本大香伊一区二区三区| 97超碰欧美中文字幕| 91色乱码一区二区三区| 99麻豆久久久国产精品免费| 成人视屏免费看| 成a人片国产精品| 91亚洲精华国产精华精华液| 99re热视频精品| 色先锋aa成人| 欧美日韩一区三区| 日韩视频免费观看高清完整版在线观看 | av成人免费在线观看| zzijzzij亚洲日本少妇熟睡| av电影天堂一区二区在线| www.在线欧美| 日本精品裸体写真集在线观看| 色综合色狠狠天天综合色| 欧美日韩一二三| 精品日韩一区二区三区免费视频| 久久新电视剧免费观看| 欧美激情一区二区三区在线| 中文字幕一区二区三区色视频| 亚洲免费看黄网站| 亚洲成av人片一区二区三区| 久久精品99国产精品日本| 国产一二精品视频| 色欧美乱欧美15图片| 欧美一区二区私人影院日本| 精品欧美一区二区三区精品久久 | 国产欧美一区二区精品婷婷| 亚洲国产成人午夜在线一区| 亚洲另类在线一区| 日本麻豆一区二区三区视频| 国产精品一区二区三区99| 99久久精品国产网站| 91精品国产高清一区二区三区蜜臀| 国产视频一区在线播放| 亚洲视频资源在线| 久久99国产精品尤物| 日本道色综合久久| 久久久精品免费观看| 亚洲成人激情自拍| 成人网页在线观看| 欧美一区二区女人| 亚洲天堂av一区| 久久99精品久久久久久国产越南 | 久久电影网站中文字幕| 97精品国产露脸对白| 精品免费日韩av| 亚洲综合久久av| 国产专区欧美精品| 在线观看91av| 亚洲精品视频一区二区| 精品亚洲国内自在自线福利| 欧美亚洲综合一区| 中文字幕免费不卡在线| 免费看黄色91| 欧美群妇大交群中文字幕| 国产精品人妖ts系列视频| 日韩av网站免费在线| 色先锋资源久久综合| 欧美经典一区二区| 国内外成人在线| 欧美一区二区三区免费在线看| 亚洲视频网在线直播| 丁香婷婷综合激情五月色| 日韩美女一区二区三区| 日韩高清一区在线| 欧美日韩美少妇 | 亚洲视频 欧洲视频| 国产一区二区三区在线观看精品| 欧美久久久久中文字幕| 一区二区免费在线| av一区二区三区黑人| 国产精品婷婷午夜在线观看| 韩国毛片一区二区三区| 日韩一二三四区| 免费在线观看视频一区| 欧美人与z0zoxxxx视频| 亚洲成人自拍网| 欧美三级乱人伦电影| 亚洲黄色av一区| 欧美专区在线观看一区| 亚洲另类在线视频| 日本高清免费不卡视频| 亚洲精品高清在线| 欧美三级电影网| 亚洲va欧美va人人爽| 欧美剧情片在线观看| 麻豆免费精品视频| 久久亚洲精品国产精品紫薇|