久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4737|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

Cheap_Flash_FS--嵌入式NandFlash文件系統(tǒng)源碼(使用極速版代碼)下載

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:49552 發(fā)表于 2017-4-24 10:37 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
Cheap_Flash_FS--嵌入式NandFlash文件系統(tǒng)源碼(使用極速版代碼)下載
Cheap_Flash_FS 代碼已經(jīng)由我們開發(fā)完成,并經(jīng)過了嚴(yán)格的測(cè)試。
壞塊管理功能包括基于壞塊表的管理程序,可以提供單/多扇區(qū)的操作。
多扇區(qū)為nandflash專門設(shè)計(jì),可以降低NANDFLASH物理擦除數(shù),具有FLASH上直接預(yù)分配功能。
其上面可以運(yùn)行(Cheap_Flash_FS(支持多扇區(qū)操作))文件系統(tǒng)。
文件系統(tǒng)可支持實(shí)時(shí)壞塊替換,包括擦除塊,塊移動(dòng),寫入頁產(chǎn)生壞塊。文件系統(tǒng)基于NAND_FLASH壞塊管理層驅(qū)動(dòng)運(yùn)行。
NAND_FLASH壞塊管理支持ECC糾錯(cuò),對(duì)每個(gè)扇區(qū)執(zhí)行二次ECC糾錯(cuò),保證數(shù)據(jù)正確的讀出。
NAND_FLASH壞塊管理層如果發(fā)現(xiàn)Unrecoverable_error扇區(qū),可把扇區(qū)讀出置為0,等于目錄已結(jié)束,避免了文件系統(tǒng)運(yùn)行出錯(cuò)。

本代碼是32BIT的壞塊表文件系統(tǒng),可支持大于4G的nandflash,包括小頁,中頁,大頁,用于用戶代碼測(cè)試!
可以用于U盤和SD卡(BLOCK_ERASE代碼不免費(fèi)提供,需收費(fèi)提供)的設(shè)計(jì)上。以及其它大容量存儲(chǔ)項(xiàng)目上。
qq:292942278   e-mail:tony_yang123@sina.com



下載:
中頁_nandflash_filesystem_with_page_2112bytes.rar (4.24 MB, 下載次數(shù): 33)




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2017-4-24 16:34 | 只看該作者
好資料,下面是樓主的主程序main.c文件:
  1. /*
  2. +FHDR------------------------------------------------------------------
  3. Copyright (c),
  4. Tony Yang –USB,FAT firmware development
  5. Contact:qq 292942278  e-mail:tony_yang123@sina.com.cn
  6. ;;;;;;;;;;
  7. Abstract:
  8. Sector Read/Write Driver
  9. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  10. $Id: flash_management.c,v 1.1.1.1 2007/02/26 14:01:12 Design Exp $
  11. -FHDR-------------------------------------------------------------------
  12. */
  13. #include "stdio.h"
  14. #include "include\types.h"
  15. #include "fat\fat.h"
  16. #include "Flash_Management\Flash_Management.h"
  17. #include "include\FAT_cfg.h"
  18. #define main__
  19. #ifdef main__
  20. extern struct core_ CORE[maximum_disks];;
  21. //extern u8 bit_map_modified[FAT_Sector_Num];;
  22. //extern u32 FirstSectorofCluster(u32 N);
  23. //extern u8 fill_fat_table_on_close_file(u32 first_cluster,u32 FIRST_CLUSTER,u32 ENDCluster,u8 *buf,u8 disk_id);

  24. /*
  25. ===============================================================================
  26. 函數(shù)
  27. main();
  28. 入口:無
  29. 出口:無
  30. ===============================================================================
  31. */
  32. static FILE *file2;
  33. void main(void)
  34. {
  35. #if 1
  36.        
  37.   u32 cc,bb,i,cluster,added_cluster,number_of_clusters,last_cluster;
  38.   u16 COUNT;  
  39.   u8 a,j,ATTR,mode;
  40.   u8 HANDLE1,HANDLE2;     
  41.   u8 buf[655360];
  42.   struct attribute ATTR2;
  43.   struct attribute ATTRIBUTE;
  44.   u8 ddd[] = "c:\\ok\\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa我們aaaaaAAAAAAAAAAAaaaaaaaaa.rar";
  45.   NandFlash_Initialization();
  46.   Makeup_Block_BAD_Table();
  47.   flash_management_sysinit();


  48.   /* if((file2 = fopen("fat32.img","wb+")) == NULL)
  49.      {
  50.       return;
  51.      }

  52.   for(i = 0;i<150000*2;i+=32)
  53.   {
  54.             read_flash_sector(buf,i,0,32);
  55.         cc = fwrite(buf,1,512*32,file2);

  56.    }
  57.   scanf("%c",&i);
  58.   scanf("%c",&i);
  59.   scanf("%c",&i);
  60.   scanf("%c",&i);
  61.   */
  62.   FAT_filesystem_autoformat('C',FAT32,150000*2);
  63.   FAT_filesystem_autoformat('D',FAT16,270336);

  64.   FAT_filesystem_initialiation();

  65.   Allocate_An_Empty_cluster(&cluster,buf,0);
  66.   printf("cluster=%d",cluster);



  67.   /*create_file("grd g .txt");
  68. */
  69. /*cd_folder("d:\\",0);
  70.    a = 0;
  71.   while(folder_enumeration(buf,a,&ATTR2) == SUCC)
  72.   {
  73.      printf("\nreaded entry=%s Attr = %x",buf,ATTR);
  74.      //if(a == 0)
  75.            // delete_folder(buf);
  76.      if(a == 0)
  77.            a = 1;
  78.   }
  79.   scanf("%c",&i);*/
  80.   //return;

  81.   //printf("格式化完成");
  82.   //scanf("%c",&i);
  83.   //disk_id = 1;
  84.   //Allocate_An_Empty_cluster(&cluster,buf,0);
  85.   //printf("cluster=%d",cluster);

  86.   //fill_fat_table_close_file(cluster,cluster+1,1000,buf,1);
  87.   //return;
  88.   /*create_file("d:\\test.txt");

  89.   HANDLE1 = open_file("d:\\test.txt");
  90.   write_file(HANDLE1,buf,500000);
  91.   close_file(HANDLE1);
  92.   printf("寫文件完成");
  93.    read_flash_sector(buf,1,1,1);
  94. buf[100] = 0xff;
  95. buf[101] = 0xff;
  96. buf[102] = 0xff;
  97. buf[103] = 0xf;

  98.   write_flash_sector(buf,1,1,1);
  99.   scanf("%c",&i);



  100.   delete_file("d:\\test.txt");
  101.   return;*/
  102. // disk_id = 1;
  103. // printf("first = %d",FirstSectorofCluster(156));  
  104. // scanf("%c",&i);

  105. /*
  106.   disk_id = 1;
  107.   Allocate_An_Empty_cluster(&cluster,buf,0);
  108.   printf("cluster=%d",cluster);
  109.   scanf("%c",&a);scanf("%c",&a);
  110.   number_of_clusters = 1000;
  111.   Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
  112.   printf("added_cluster =%d,number_of_clusters =%d,last_cluster=%d",added_cluster,number_of_clusters,last_cluster);

  113.    scanf("%c",&a);scanf("%c",&a);
  114.   
  115.   
  116.   Allocate_An_Empty_cluster(&cluster,buf,0);
  117.   printf("cluster=%d",cluster);
  118.   scanf("%c",&a);scanf("%c",&a);
  119.    
  120.   number_of_clusters = 1000;
  121.   Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
  122.   printf("added_cluster =%d,number_of_clusters =%d,last_cluster=%d",added_cluster,number_of_clusters,last_cluster);

  123.   scanf("%c",&a);scanf("%c",&a);
  124.   return;*/
  125. read_flash_sector(buf,36,0,1);
  126. buf[100] = 0xff;
  127. buf[101] = 0xff;
  128. buf[102] = 0xff;
  129. buf[103] = 0xf;
  130. #if 1
  131. buf[16] = 0xff;
  132. buf[17] = 0xff;
  133. buf[18] = 0xff;
  134. buf[19] = 0xf;

  135. buf[48] = 0xff;
  136. buf[49] = 0xff;
  137. buf[50] = 0xff;
  138. buf[51] = 0xf;

  139. buf[32] = 0xff;
  140. buf[33] = 0xff;
  141. buf[34] = 0xff;
  142. buf[35] = 0xf;
  143. #endif
  144.   buf[108] = 0xff;  
  145. buf[109] = 0xff;
  146. buf[110] = 0xff;
  147. buf[111] = 0xf;
  148.   write_flash_sector(buf,36,0,1);
  149. #if 0
  150.   scanf("%c",&a);
  151.   number_of_clusters = 6;  
  152.   Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
  153.   printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
  154.   number_of_clusters = 6;  
  155.   Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
  156.   printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);

  157.     number_of_clusters = 6;  
  158.   Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
  159.   printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
  160.   number_of_clusters = 6;  
  161.   Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
  162.   printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
  163.   number_of_clusters = 6;  
  164.   Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
  165.   printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
  166.   number_of_clusters = 6;  
  167.   Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
  168.   printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);

  169.   scanf("%c",&a);
  170. #endif
  171.    /* cd_folder("d:\\",0);
  172.     create_file("myfile.rar");
  173.     HANDLE1 = open_file("myfile.rar");
  174.    if((file2 = fopen("readed.rar","rb+")) == NULL)
  175.      {
  176.       return;
  177.      }

  178.         if(HANDLE1 != FAIL)
  179.         {   
  180.                 do{
  181.             printf("#");
  182.         cc = fread(buf,1,500000,file2);
  183.             if(write_file(HANDLE1,buf, cc)==Disk_is_full)
  184.                         break;  
  185.                 if(cc < 500000)   
  186.                         break;
  187.                 }while(1);
  188.         }
  189.         close_file(HANDLE1);  

  190. return;*/
  191. /*
  192.         printf("copy file");
  193.         scanf("%c",&a);scanf("%c",&a);
  194.             HANDLE1 = open_file("myfile.rar");
  195.         create_file("myfile2.rar");
  196.                 HANDLE2 = open_file("myfile2.rar");

  197.                 do{
  198.             printf("#");
  199.         cc = read_file(HANDLE1,buf,500000);
  200.             if(write_file(HANDLE2,buf, cc)==Disk_is_full)
  201.                         break;  
  202.                 if(cc < 500000)   
  203.                         break;
  204.                 }while(1);
  205. scanf("%c",&a);scanf("%c",&a);
  206.    //return;

  207.         close_file(HANDLE1);  
  208.         close_file(HANDLE2);
  209. //        return;*/
  210.         #if 0

  211.   create_file("aa.rar");
  212.   HANDLE1 = open_file("aa.rar");
  213.   write_file(HANDLE1,buf,500000);
  214.   write_file(HANDLE1,buf,500000);
  215.   write_file(HANDLE1,buf,500000);
  216.   write_file(HANDLE1,buf,500000);
  217.   write_file(HANDLE1,buf,500000);
  218.   write_file(HANDLE1,buf,500000);
  219.   write_file(HANDLE1,buf,500000);
  220.   write_file(HANDLE1,buf,500000);
  221.   close_file(HANDLE1);

  222.   HANDLE1 = open_file("aa.rar");
  223.      if((file2 = fopen("readed.rar","rb+")) == NULL)
  224.      {
  225.       return;
  226.      }
  227.   
  228.                 do{
  229.             printf("#");
  230.         cc = fread(buf,1,500000,file2);
  231.             if(write_file(HANDLE1,buf, cc)==Disk_is_full)
  232.                break;
  233.                 if(cc < 500000)   
  234.                         break;
  235.                 }while(1);
  236.                 close_file(HANDLE1);
  237.                 //printf("close_file");
  238.                 fclose(file2);
  239. #endif
  240. //  return;

  241.   cd_folder("d:\\",0);
  242.   create_floder("中文目錄");
  243.   create_floder("中文目錄\\中文目錄");
  244.   create_file("中文目錄\\文件1.txt");
  245.   create_file("中文目錄\\文件2.txt");
  246.   create_file("中文目錄\\2.txt");
  247.   HANDLE1 = open_file("中文目錄\\2.txt");
  248.   write_file(HANDLE1,buf,500000);
  249.   write_file(HANDLE1,buf,500000);
  250.   write_file(HANDLE1,buf,500000);
  251.   write_file(HANDLE1,buf,500000);
  252.   write_file(HANDLE1,buf,500000);
  253.   write_file(HANDLE1,buf,500000);
  254.   write_file(HANDLE1,buf,500000);
  255.   write_file(HANDLE1,buf,500000);
  256.   close_file(HANDLE1);

  257.   //cd_folder("d:\\",0);
  258.   create_file("中文目錄\\3.txt");
  259.   HANDLE1 = open_file("中文目錄\\3.txt");
  260.   write_file(HANDLE1,buf,500000);

  261.   close_file(HANDLE1);
  262.   printf("write_complete");
  263.   scanf("%c",&i);
  264.   delete_file("中文目錄\\2.txt");
  265.   scanf("%c",&i);
  266.   //return;
  267.   cd_folder("中文目錄",0);
  268.   
  269.   a = 0;
  270.   while(folder_enumeration(buf,a,&ATTR2) == SUCC)
  271.   {
  272.      printf("\nreaded entry=%s Attr = %x",buf,ATTR);

  273.          printf("\naccess time: %d-%d-%d",ATTR2.access_time_year,ATTR2.access_time_month,ATTR2.access_time_day);
  274.      printf("\ncreate time: %d-%d-%d",ATTR2.create_time_year,ATTR2.create_time_month,ATTR2.create_time_day);
  275.      printf("\ncreate time: %d:%d:%d",ATTR2.create_time_hour,ATTR2.create_time_minute,ATTR2.create_time_second);
  276.      printf("\nmodify time: %d-%d-%d",ATTR2.modify_time_year,ATTR2.modify_time_month,ATTR2.modify_time_day);
  277.      printf("\nmodify time: %d:%d:%d",ATTR2.modify_time_hour,ATTR2.modify_time_minute,ATTR2.modify_time_second);
  278.      printf("\nattr=%x",ATTR2.attr);  
  279.          printf("\nFILESIZE=%x",ATTR2.file_size);   
  280.      if(a == 0)
  281.            a = 1;
  282.   }

  283. cd_folder("中文目錄",0);

  284.   a = 0;
  285.   while(folder_enumeration(buf,a,&ATTR2) == SUCC)
  286.   {
  287.      printf("\nreaded entry=%s Attr = %x",buf,ATTR);
  288.          printf("\naccess time: %d-%d-%d",ATTR2.access_time_year,ATTR2.access_time_month,ATTR2.access_time_day);
  289.      printf("\ncreate time: %d-%d-%d",ATTR2.create_time_year,ATTR2.create_time_month,ATTR2.create_time_day);
  290.      printf("\ncreate time: %d:%d:%d",ATTR2.create_time_hour,ATTR2.create_time_minute,ATTR2.create_time_second);
  291.      printf("\nmodify time: %d-%d-%d",ATTR2.modify_time_year,ATTR2.modify_time_month,ATTR2.modify_time_day);
  292.      printf("\nmodify time: %d:%d:%d",ATTR2.modify_time_hour,ATTR2.modify_time_minute,ATTR2.modify_time_second);
  293.      printf("\nattr=%x",ATTR2.attr);  
  294.          printf("\nFILESIZE=%x",ATTR2.file_size);  
  295.      if(a == 0)
  296.            a = 1;
  297.   }
  298.   /*bit_map_modified[0] = 1;
  299.     bit_map_modified[1] = 1;
  300.           bit_map_modified[4] = 1;
  301.             bit_map_modified[5] = 1;
  302.                   bit_map_modified[6] = 1;
  303.                     bit_map_modified[28] = 1;
  304.     bit_map_modified[29] = 1;
  305.           bit_map_modified[30] = 1;
  306.             bit_map_modified[31] = 1;
  307.             bit_map_modified[32] = 1;
  308.   bit_map_write();
  309.   while(1);*/

  310.   ///disk_id =1;
  311.   Allocate_An_Empty_cluster(&cluster,buf,0);
  312.   printf("cluster=%d",cluster);
  313.   

  314. /* scanf("%c",&a);
  315.   number_of_clusters = 6;  
  316.   Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
  317.   printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
  318.   number_of_clusters = 6;  
  319.   Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
  320.   printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);

  321.     number_of_clusters = 6;  
  322.   Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
  323.   printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
  324.   number_of_clusters = 6;  
  325.   Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
  326.   printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
  327.   number_of_clusters = 6;  
  328.   Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
  329.   printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
  330.   number_of_clusters = 6;  
  331.   Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
  332.   printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);

  333.   scanf("%c",&a);
  334.   //return;*/

  335. #if 1
  336.   volume_inquiry('c',&cc,&bb);
  337.   printf("Volume C Capacity: %ld\n",cc);
  338.   printf("Volume C FreeSpace: %ld\n",bb);  

  339.   volume_inquiry('d',&cc,&bb);
  340.   

  341.   printf("Volume D Capacity: %ld\n",cc);
  342.   printf("Volume D FreeSpace: %ld\n",bb);
  343.   scanf("%c",&a);

  344.   scanf("%c",&a);

  345.   //return;
  346.   create_floder("D:\\ok");
  347.   create_file("d:\\ok\\1_1.txt");



  348.   HANDLE1 = open_file("d:\\ok\\1_1.txt");
  349.   
  350.   
  351.   if(HANDLE1 == 0XFF)
  352.   {
  353.   printf("open file failed");
  354.   scanf("%c",&a);
  355.   }
  356.   for(i = 0;i<10000;i++)
  357.           buf[i] = 0x55;

  358.   write_file(HANDLE1,buf,10000);
  359.   write_file(HANDLE1,buf,10000);
  360.   write_file(HANDLE1,buf,10000);
  361.   write_file(HANDLE1,buf,10000);

  362.   f_seek(HANDLE1,200,SEEK_SET);
  363.   for(i = 0;i<100;i++)
  364.           buf[i] = i;
  365.   write_file(HANDLE1,buf,100);
  366.   close_file(HANDLE1);

  367.   //scanf("%c",&a);
  368. /*  建立一個(gè)目錄CREATE_FOLDER_TEST,以測(cè)試建立目錄函數(shù)create_floder()  */
  369.   create_floder("D:\\aaaaaaaaaa");
  370.   create_floder("d:\\aaaaaaaaaa");
  371.   create_floder("aaaaaaaaaaA");
  372.   create_floder("aaaaaaaaaaA");
  373.   create_file("D:\\aaaaaaaaaaAA我們.TXT");
  374.   create_file("c:\\aaaaaaaaaaAA.TXT");
  375.   create_floder("C:\\AAAAAAAAAAAaaaaaa");
  376.   create_floder("D:\\AAAAAAAAAAAaaaaaa");
  377.   create_floder("c:\\CREATE_FOLDER_TEST");
  378.   create_floder("D:\\CREATE_FOLDER_TEST");
  379. scanf("%c",&a);



  380.   if(get_file_attribute("c:\\aaaaaaaaaaAA.TXT", The_FILE, &ATTRIBUTE)== SUCC)                                                                                                                                
  381.   { printf("\n文件:aaaaaaaaaaAA.TXT");
  382.         printf("\naccess time: %d-%d-%d",ATTRIBUTE.access_time_year,ATTRIBUTE.access_time_month,ATTRIBUTE.access_time_day);
  383.     printf("\ncreate time: %d-%d-%d",ATTRIBUTE.create_time_year,ATTRIBUTE.create_time_month,ATTRIBUTE.create_time_day);
  384.     printf("\ncreate time: %d:%d:%d",ATTRIBUTE.create_time_hour,ATTRIBUTE.create_time_minute,ATTRIBUTE.create_time_second);
  385.     printf("\nmodify time: %d-%d-%d",ATTRIBUTE.modify_time_year,ATTRIBUTE.modify_time_month,ATTRIBUTE.modify_time_day);
  386.     printf("\nmodify time: %d:%d:%d",ATTRIBUTE.modify_time_hour,ATTRIBUTE.modify_time_minute,ATTRIBUTE.modify_time_second);
  387.     printf("\nattr=%x",ATTR2.attr);   
  388.   }
  389.   else
  390.   {
  391.     printf("FAIL");
  392.   }

  393.   scanf("%c",&a);

  394. /*  在目錄CREATE_FOLDER_TEST下建立一個(gè)文件,以測(cè)試建立目錄函數(shù)create_file()  */
  395. create_file("C:\\CREATE_FOLDER_TEST\\created_file.txt");
  396. create_file("D:\\CREATE_FOLDER_TEST\\created_file.txt");
  397. create_file("C:\\CREATE_FOLDER_TEST\\AAAAAAAAAAB");
  398. create_file("D:\\CREATE_FOLDER_TEST\\AAAAAAAAAABaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  399. create_file("D:\\CREATE_FOLDER_TEST\\AAAAAAAAAABB");
  400. create_file("D:\\CREATE_FOLDER_TEST\\AAAAAAAAAABBBB");
  401. create_file("D:\\ok\\aa.rarc");


  402. //printf("\n\n rename_folder");
  403. rename_folder("C:\\CREATE_FOLDER_TEST","short");
  404. //printf("\n\n exit rename_folder");
  405. /* 重命令文件CREATE_FOLDER_TEST\\created_file.txt為"DFDFDFDFDFDFDFDFSDFSDTONY.TXT"
  406.    ,以測(cè)試重命名文件函數(shù)rename_file() */

  407. //rename_file("ok\\bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.RAR","DFDFDFDFDFDFDFDFSDFSDTONY.TXT");
  408. //scanf("%c",&a);       
  409. /* 刪除文件CREATE_FOLDER_TEST\\created_file.txt */
  410.   //delete_file("ok\\ZZZZZZZZZZZZZZZUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.RAR");

  411. /* 刪除目錄CREATE_FOLDER_TEST */
  412.   //delete_folder("CREATE_FOLDER_TEST");

  413. /*  列舉CREATE_FOLDER_TEST目錄下面的所有文件,打印到屏幕  */
  414.   cd_folder("C:\\short",0);
  415.   
  416.   a = 0;
  417.   while(folder_enumeration(buf,a,&ATTR2) == SUCC)
  418.   {
  419.      printf("\nreaded entry=%s Attr = %x",buf,ATTR);

  420.      if(a == 0)
  421.            a = 1;
  422.   }
  423. scanf("%c",&a);       

  424.    cd_folder(" ",1);

  425. /*  列舉根目錄的文件,打印去屏幕  */

  426.    a = 0;
  427.   while(folder_enumeration(buf,a,&ATTR2) == SUCC)
  428.   {
  429.      printf("\nreaded entry=%s Attr = %x",buf,ATTR);

  430.      if(a == 0)
  431.            a = 1;
  432.   }
  433.   printf("開始寫連續(xù)文件");

  434. scanf("%c",&a);scanf("%c",&a);
  435. //delete_file(ddd);
  436. /* 在OK目錄下連續(xù)寫文件,readed.rar,直到磁盤被寫滿 */
  437.    create_floder("c:\\ok");
  438. j = 0;
  439. COUNT = 0;
  440. do{
  441. for(a = 0;a < 25; a++)
  442. {
  443.   COUNT++;
  444. //printf("close_file");
  445. if(create_file(ddd) == SUCC)//File_already_exist)
  446. {
  447.    printf("Create file %s successfully\n",ddd);
  448.    HANDLE1 = open_file(ddd);
  449.    if((file2 = fopen("readed.rar","rb+")) == NULL)
  450.      {
  451.       return;
  452.      }
  453.         if(HANDLE1 != FAIL)
  454.         {   
  455.                   
  456.                 printf("\nOpen File %s successfully",ddd);
  457.                 do{
  458.             printf("#");
  459.         cc = fread(buf,1,500000,file2);
  460.             if(write_file(HANDLE1,buf, cc)==Disk_is_full)
  461.                break;
  462.                 //write_file(HANDLE1,buf, cc);
  463.                 if(cc < 500000)   
  464.                         break;
  465.                 }while(1);
  466.                 close_file(HANDLE1);
  467.                 //printf("close_file");
  468.                 fclose(file2);
  469.                 //break;
  470.                 //return;
  471.         }
  472.         else
  473.        printf("\nOpen File %s failed",ddd);

  474. }
  475. else
  476.    printf("Create file %s failed\n",ddd);
  477.   ddd[6+j] ++;
  478. }
  479.    //break;
  480.   j++;
  481. }while(j< 20);
  482. printf("CORE[disk_id].min_cluster_for_allocat=%d",CORE[0].min_cluster_for_allocat);
  483. scanf("%c",&a);       


  484. //return;

  485. /*
  486. scanf("%c",&a);
  487.   cd_folder("c:\\ok",0);
  488.   
  489.    a = 0;
  490.   while(folder_enumeration(buf,a,&ATTR) == SUCC)
  491.   {
  492.      printf("\nreaded entry=%s Attr = %x",buf,ATTR);
  493.      delete_file(buf);
  494.      if(a == 0)
  495.            a = 1;
  496.   }
  497.   a = delete_folder("c:\\ok");
  498.   if(a == SUCC)
  499.           printf("delete_folder c:\\ok 成功");
  500.   else if(a == Folder_for_delete_not_exist)
  501.       printf("Folder_for_delete_not_exist");
  502.   else if(a == Folder_is_not_empty)
  503.           printf("Folder_is_not_empty");
  504. scanf("%c",&a);*/
  505. /*  分離磁盤0中的所有文件  */
  506.   /*  分離磁盤0中的所有文件  */

  507. printf("  /*  分離磁盤0中的所有文件  */");
  508. scanf("%c",&a);
  509.   a = 0;
  510.   while(disk_enumeration(0,buf,a,&ATTR) == SUCC)
  511.   {
  512.      printf("\nreaded entry=%s Attr = %x",buf,ATTR);
  513.      if(a == 0)
  514.            a = 1;

  515. ///printf("write 6 failed!");
  516.          if(ATTR & ATTR_DIRECTORY)
  517.          {
  518.            mkdir(buf+3);
  519.            continue;
  520.          }
  521.          else
  522.      {//printf("write 5 failed!");
  523.                  if ((file2 = fopen(buf+3,"wb+")) == NULL)
  524.                  {  
  525.            return;
  526.                  }   
  527.              else
  528.                    HANDLE1 = open_file(buf);
  529.          }
  530.          //printf("write 4 failed! %d",HANDLE1);
  531.         if(HANDLE1 != FAIL)
  532.                 do{
  533.                 //        printf("read 21 failed!");
  534.             cc = read_file(HANDLE1,buf+400,55000);
  535.                 //printf("read failed!");
  536.                 printf("\nreaded chars = %ld ",cc);
  537.         fwrite(buf+400,1,cc,file2);
  538.                 //printf("write failed!");
  539.                 if(cc != 55000)
  540.                 {
  541.                         close_file(HANDLE1);
  542.   
  543.                        
  544.                 break;   
  545.                 }   
  546.        
  547.         }while(1);
  548.     else{
  549.         printf("Openfile failed!");
  550.         }
  551.     fclose(file2);         
  552.   }


  553. scanf("%c",&a);

  554. scanf("%c",&a);

  555. #endif
  556. #endif


  557. #define new_
  558. #ifdef new_
  559. printf("開始拷貝文件");
  560. scanf("%c",&a);

  561. scanf("%c",&a);

  562. /* DISK0  拷貝至DISK1 */
  563.   mode = 0;      //設(shè)置disk_enumeration列舉mode(0)-復(fù)位至第一個(gè)文件項(xiàng)或目錄項(xiàng)開始枚舉
  564.   while(disk_enumeration(0,buf,mode,&ATTR) == SUCC)          //枚舉一個(gè)目錄項(xiàng)或目錄項(xiàng)
  565.   {
  566.      printf("\nreaded entry=%s Attr = %x",buf,ATTR); //打印被枚舉的一個(gè)目錄項(xiàng)或目錄項(xiàng)
  567.        
  568.      if(mode == 0)
  569.            mode = 1;    //設(shè)置disk_enumeration列舉mode(1)- 繼續(xù)上一枚舉后的目錄項(xiàng)或目錄項(xiàng)
  570.          if(ATTR & ATTR_DIRECTORY)
  571.          {
  572.            buf[0]++;
  573.            create_floder(buf);                              //建一個(gè)disk_enumeration的目錄
  574.            continue;
  575.          }
  576.          else                                                                   //復(fù)制文件
  577.      { HANDLE1 = open_file(buf);                                            //打開文件
  578.            buf[0]++;
  579.            create_file(buf);                                  //在DISK1上建立文件
  580.                
  581.          }
  582.         if(HANDLE1 != FAIL)
  583.         { HANDLE2 = open_file(buf);                                //打開DISK1上建立的文件
  584.           if(HANDLE2 == FAIL)
  585.                   break;
  586.           if(HANDLE2 == The_disk_is_full)
  587.                   break;
  588.         do{                                                                     //復(fù)制文件
  589.             cc = read_file(HANDLE1,buf+400,500000);                                //讀文件
  590.                 printf("\nreaded chars = %ld ",cc);                   //打印讀文件讀取的字節(jié)數(shù)
  591.         if(write_file(HANDLE2,buf+400,cc)==Disk_is_full)
  592.                 {close_file(HANDLE1);                                 //文件復(fù)制結(jié)束,關(guān)閉文件
  593.                  close_file(HANDLE2);
  594.                         break;                                       //將讀取的字節(jié)寫去DISK1上的文件
  595.                 }
  596.                 if(cc != 500000)                                 //檢查讀取的字節(jié)數(shù),確認(rèn)文件尾
  597.                 {
  598.                  close_file(HANDLE1);                                 //文件復(fù)制結(jié)束,關(guān)閉文件
  599.                  close_file(HANDLE2);
  600.                   break;   
  601.                 }
  602.           }while(1);
  603.         }
  604.     else
  605.         {
  606.           printf("Openfile failed!");
  607.         }
  608.   }
  609. #else

  610. /* DISK0  拷貝至DISK1 */
  611.   mode = 0;      //設(shè)置disk_enumeration列舉mode(0)-復(fù)位至第一個(gè)文件項(xiàng)或目錄項(xiàng)開始枚舉
  612.   while(disk_enumeration(0,buf,mode,&ATTR) == SUCC)          //枚舉一個(gè)目錄項(xiàng)或目錄項(xiàng)
  613.   {
  614.      printf("\nreaded entry=%s Attr = %x",buf,ATTR); //打印被枚舉的一個(gè)目錄項(xiàng)或目錄項(xiàng)
  615.        
  616.      if(mode == 0)
  617.            mode = 1;    //設(shè)置disk_enumeration列舉mode(1)- 繼續(xù)上一枚舉后的目錄項(xiàng)或目錄項(xiàng)
  618.          if(ATTR & ATTR_DIRECTORY)
  619.          {
  620.            buf[0]++;
  621.            create_floder(buf);                              //建一個(gè)disk_enumeration的目錄
  622.            continue;
  623.          }
  624.          else                                                                   //復(fù)制文件
  625.      { HANDLE1 = open_file(buf);                                            //打開文件
  626.            buf[0]++;
  627.            create_file(buf);                                  //在DISK1上建立文件
  628.                
  629.          }
  630.         if(HANDLE1 != FAIL)
  631.         { HANDLE2 = open_file(buf);                                //打開DISK1上建立的文件
  632.           if(HANDLE2 == FAIL)
  633.                   break;
  634.         do{                                                                     //復(fù)制文件
  635.             cc = read_file(HANDLE1,buf+400,50000);                                //讀文件
  636.                 printf("\nreaded chars = %ld ",cc);                   //打印讀文件讀取的字節(jié)數(shù)
  637.         cc = write_file(HANDLE2,buf+400,cc);                //將讀取的字節(jié)寫去DISK1上的文件
  638.                 if(cc != 50000)                                 //檢查讀取的字節(jié)數(shù),確認(rèn)文件尾
  639.                 {
  640.                  close_file(HANDLE1);                                 //文件復(fù)制結(jié)束,關(guān)閉文件
  641.                  close_file(HANDLE2);
  642.                   break;   
  643.                 }
  644.           }while(1);
  645.         }
  646.     else
  647.         {
  648.           printf("Openfile failed!");
  649.         }
  650.   }

  651. #endif

  652. scanf("%c",&a);       
  653. #else


  654. #endif
  655. }
  656. #if 0

  657. void main(void)
  658. {
  659.         u8 ret,buf[65536],ATTR;
  660.         u8 a;
  661.         u8 handle;
  662.     struct attribute ATTRIBUTE;
  663.         ret = flash_management_sysinit();

  664.         ret = FAT_filesystem_autoformat('C',FAT32,270336*2*2);

  665.         ret = FAT_filesystem_initialiation();

  666.         ret = create_floder("C:\\newFolder_0");
  667.         if (ret == 0)
  668.         {
  669.                 printf("newFolder_0 創(chuàng)建成功!\n");
  670.         }
  671.        
  672.         ret = create_file("C:\\newFolder_0\\newFile_1");
  673.         if (ret == 0)
  674.         {
  675.                 printf("newFolder_0\\newFile_1 創(chuàng)建成功!\n");
  676.         }
  677.         ret = create_file("C:\\newFolder_0\\newFile_2");
  678.         if (ret == 0)
  679.         {
  680.                 printf("newFolder_0\\newFile_2 創(chuàng)建成功!\n");
  681.         }

  682.         ret = delete_file("C:\\newFolder_0\\newFile_1");
  683.         if (ret == 0)
  684.         {
  685.                 printf("newFolder_0\\newFile_1 刪除成功!\n");
  686.         }
  687.         ret = delete_file("C:\\newFolder_0\\newFile_2");
  688.         if (ret == 0)
  689.         {
  690.                 printf("newFolder_0\\newFile_2 刪除成功!\n");
  691.         }
  692.         cd_folder("C:\\newFolder_0",1);       

  693.         ret = delete_folder("C:\\newFolder_0");//成功
  694.         if (ret == 0)
  695.         {
  696.                 printf("newFolder_0 刪除成功!\n\n");
  697.         }
  698.         else
  699.                 printf("newFolder_0 刪除失敗!\n\n");



  700.   create_file("folder"); //1、cd_folder()函數(shù)把沒有后綴的文件當(dāng)成文件夾。--解決了
  701.   if(cd_folder("folder",0)==0)
  702.   {
  703.     printf("\n進(jìn)入目錄成功!");
  704.   
  705.   }
  706.   else
  707.   {
  708.         printf("\n進(jìn)入目錄失敗!");
  709.   
  710.   }
  711.   //2、create_floder()可以創(chuàng)建帶".*"后綴的文件夾,但是folder_enumeration()無法識(shí)別(WinImage可以識(shí)別為文件夾)。
  712.   //測(cè)試結(jié)果,可以識(shí)別的啊
  713.   cd_folder("c:\\",0);
  714.   create_floder("CREATE_FOLDER.*");
  715.    a = 0;
  716.   while(folder_enumeration(buf,a,&ATTR2) == SUCC)
  717.   {
  718.      printf("\nreaded entry=%s Attr = %x",buf,ATTR);

  719.      if(a == 0)
  720.            a = 1;
  721.   }

  722.   //3、create_file()創(chuàng)建文件后,名稱的英文字符會(huì)全部變成大寫。
  723.   //測(cè)試結(jié)果----通過WINIMG查看--大小寫未變啊!
  724.   create_file("c:\\aaaaaaaaAAAAAAAAAAAAA");


  725.   //4、rename_file()函數(shù)重命名文件和文件夾后,名稱的英文字符會(huì)全部變成大寫。
  726.   //代碼已經(jīng)修改--已經(jīng)解決了
  727.   create_file("c:\\olderFile");
  728.   rename_file("c:\\olderFile","NewFile");


  729.   //5、rename_file()可以把文件夾修改為帶".*"后綴的名稱,修改成功后無法用cd_folder()進(jìn)入,用
  730.   //   WinImage打開識(shí)別為后綴名類型的文件。
  731.   //6、rename_file()函數(shù)重命名文件夾成功后,folder_enumeration()可以識(shí)別(用WinImage無法識(shí)別文
  732.   //件夾,文件類型變成了"本地磁盤")。
  733.   //通過修改代碼,rename_file只能修改文件的名稱
  734.   create_floder("c:\\olderFolderName");
  735.   if(rename_file("c:\\olderFolderName","NewFileName")==0)
  736.   {
  737.     printf("\nrename_file()修改文件夾成功!");
  738.   }
  739.   else
  740.   {
  741.     printf("\nrename_file()修改文件夾失敗!");
  742.   }
  743.   //7、delete_file()函數(shù)可以刪除文件夾,刪除成功后文件夾消失,但是空間并沒有釋放。
  744.   //代碼已修改,現(xiàn)在delete_file()不能刪除文件夾
  745.   //刪除文件夾請(qǐng)用delete_folder()
  746.   create_floder("c:\\tempfolder");
  747.   if(delete_file("c:\\tempfolder") == 0)
  748.   {
  749.      printf("\ndelete_file()刪除文件夾成功!");
  750.   }
  751.   else
  752.   {
  753.      printf("\ndelete_file()刪除文件夾失敗!");
  754.   }


  755. //1、添加獲取文件夾和文件的屬性的函數(shù):包括:是不是文件夾、名稱、大小、創(chuàng)建時(shí)間,修改時(shí)間等。

  756.   //獲取文件的訪問,建立,修改時(shí)間,文件大小       
  757.   create_file("test.txt");
  758.   handle = open_file("test.txt");//寫入文件50000個(gè)字節(jié)
  759.   write_file(handle,buf,50000);

  760.   close_file(handle);
  761.   if(get_file_attribute("test.txt", The_FILE, &ATTRIBUTE)== SUCC)                                                                                                                                
  762.   {
  763.         printf("\n文件:test.txt\naccess time: %d-%d-%d",ATTR2.access_time_year,ATTR2.access_time_month,ATTR2.access_time_day);
  764.     printf("\ncreate time: %d-%d-%d",ATTR2.create_time_year,ATTR2.create_time_month,ATTR2.create_time_day);
  765.     printf("\ncreate time: %d:%d:%d",ATTR2.create_time_hour,ATTR2.create_time_minute,ATTR2.create_time_second);
  766.     printf("\nmodify time: %d-%d-%d",ATTR2.modify_time_year,ATTR2.modify_time_month,ATTR2.modify_time_day);
  767.     printf("\nmodify time: %d:%d:%d",ATTR2.modify_time_hour,ATTR2.modify_time_minute,ATTR2.modify_time_second);
  768.     printf("\nattr=%x",ATTR2.attr);
  769.         if(ATTR2.attr & ATTR_DIRECTORY)
  770.         {
  771.            printf("\n這是一個(gè)文件夾");
  772.         }
  773.         else
  774.         {
  775.            printf("\n這是一個(gè)文件");
  776.         }
  777.         printf("\nfile_size = %d",ATTR2.file_size);
  778.   }
  779.   else
  780.   {
  781.     printf("FAIL");
  782.   }

  783.    //獲取目錄的訪問,建立,修改時(shí)間
  784.   create_floder("test");
  785.   if(get_file_attribute("test", The_DIRECTORY, &ATTRIBUTE)== SUCC)                                                                                                                                
  786.   {
  787.         printf("\n目錄:test\naccess time: %d-%d-%d",ATTR2.access_time_year,ATTR2.access_time_month,ATTR2.access_time_day);
  788.     printf("\ncreate time: %d-%d-%d",ATTR2.create_time_year,ATTR2.create_time_month,ATTR2.create_time_day);
  789.     printf("\ncreate time: %d:%d:%d",ATTR2.create_time_hour,ATTR2.create_time_minute,ATTR2.create_time_second);
  790.     printf("\nmodify time: %d-%d-%d",ATTR2.modify_time_year,ATTR2.modify_time_month,ATTR2.modify_time_day);
  791.     printf("\nmodify time: %d:%d:%d",ATTR2.modify_time_hour,ATTR2.modify_time_minute,ATTR2.modify_time_second);
  792.     printf("\nattr=%x",ATTR2.attr);  
  793.     if(ATTR2.attr & ATTR_DIRECTORY)
  794.         {
  795.            printf("\n這是一個(gè)文件夾");
  796.         }
  797.         else
  798.         {
  799.            printf("\n這是一個(gè)文件");
  800.         }
  801.   }
  802.   else
  803.   {
  804.     printf("FAIL");
  805.   }

  806.   //1. 判斷該文件是文件夾還是文件
  807.   printf("\n\n1. 判斷該文件是文件夾還是文件");
  808.   create_file("c:\\test.txt");
  809.   switch (check_type("c:\\test.txt"))
  810.   {
  811.     case The_DIRECTORY:printf("\n文件c:\\test.txt是一個(gè)目錄");break;
  812.     case The_FILE:printf("\n文件c:\\test.txt是一個(gè)文件");break;
  813.         case The_file_is_not_exist:printf("\n文件c:\\test.txt不存在");break;

  814.   }

  815.   create_floder("c:\\test");
  816.   switch (check_type("c:\\test"))
  817.   {
  818.     case The_DIRECTORY:printf("\n文件c:\\test是一個(gè)目錄");break;
  819.     case The_FILE:printf("\n文件c:\\test是一個(gè)文件");break;
  820.         case The_file_is_not_exist:printf("\n文件c:\\test不存在");break;

  821.   }
  822.   switch (check_type("c:\\not_exist"))
  823.   {
  824.     case The_DIRECTORY:printf("\n文件c:\\not_exist是一個(gè)目錄");break;
  825.     case The_FILE:printf("\n文件c:\\not_exist是一個(gè)文件");break;
  826.         case The_file_is_not_exist:printf("\n文件c:\\not_exist不存在");break;

  827.   }

  828.   //2.判斷文件夾或文件是否存在
  829.   printf("\n\n2.判斷文件夾或文件是否存在");
  830.   create_floder("c:\\temp");
  831.   if(check_exist("c:\\temp", The_DIRECTORY) == 0)
  832.   {
  833.       printf("\n\n目錄c:\\temp存在!");
  834.   }
  835.   else
  836.   {
  837.       printf("\n\n目錄c:\\temp不存在!");
  838.   }

  839.   create_file("c:\\file");
  840.   if(check_exist("c:\\file", The_FILE) == 0)
  841.   {
  842.       printf("\n\n文件c:\\file存在!");
  843.   }
  844.   else
  845.   {
  846.       printf("\n\n文件c:\\file不存在!");
  847.   }

  848.     if(check_exist("c:\\file_not_exist", The_FILE) == 0)
  849.   {
  850.       printf("\n\n文件c:\\file_not_exist存在!");
  851.   }
  852.   else
  853.   {
  854.       printf("\n\n文件c:\\file_not_exist不存在!");
  855.   }
  856.   scanf("%c",&ret);       


  857. }
  858. #endif
  859. /*
  860. +FFTR--------------------------------------------------------------------
  861. $Log: main.C,v $
  862. Revision 1.12  2007/05/10 11:13:14  design

  863. -FFTR--------------------------------------------------------------------
  864. */

復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久av | 九九久久久 | 亚洲欧美自拍偷拍视频 | 99精品欧美一区二区三区综合在线 | 国产精品久久久久久久三级 | 日韩电影中文字幕在线观看 | 久草在线视频中文 | 欧美日在线 | 福利一区视频 | 一区二区成人 | 九色在线观看 | 亚洲高清视频一区二区 | 亚洲毛片在线观看 | 国产精品一区二区三区久久 | 国产精品久久久免费 | 亚洲国产欧美精品 | 成人一区在线观看 | 久久久久亚洲精品 | 黄色a视频 | 91一区二区在线观看 | 日韩精品在线播放 | 少妇午夜一级艳片欧美精品 | 久久99久久99久久 | 日韩午夜影院 | 欧美专区在线 | 日韩视频区 | 国产精品久久精品 | 国产美女自拍视频 | 视频一区在线 | 精品视频在线免费观看 | 日韩在线视频一区二区三区 | 国产亚洲精品美女久久久久久久久久 | 高清一区二区 | av免费入口 | 精品一区二区av | 国产精品久久久久久久免费大片 | 黄色a三级 | a级在线 | av免费网站在线观看 | 国产一级视频在线观看 | 欧美一区 |