找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3920|回复: 1
收起左侧

Cheap_Flash_FS--嵌入式NandFlash文件系统源码(使用极速版代码)下载

[复制链接]
ID:49552 发表于 2017-4-24 10:37 | 显示全部楼层 |阅读模式
Cheap_Flash_FS--嵌入式NandFlash文件系统源码(使用极速版代码)下载
Cheap_Flash_FS 代码已经由我们开发完成,并经过了严格的测试。
坏块管理功能包括基于坏块表的管理程序,可以提供单/多扇区的操作。
多扇区为nandflash专门设计,可以降低NANDFLASH物理擦除数,具有FLASH上直接预分配功能。
其上面可以运行(Cheap_Flash_FS(支持多扇区操作))文件系统。
文件系统可支持实时坏块替换,包括擦除块,块移动,写入页产生坏块。文件系统基于NAND_FLASH坏块管理层驱动运行。
NAND_FLASH坏块管理支持ECC纠错,对每个扇区执行二次ECC纠错,保证数据正确的读出。
NAND_FLASH坏块管理层如果发现Unrecoverable_error扇区,可把扇区读出置为0,等于目录已结束,避免了文件系统运行出错。

本代码是32BIT的坏块表文件系统,可支持大于4G的nandflash,包括小页,中页,大页,用于用户代码测试!
可以用于U盘和SD卡(BLOCK_ERASE代码不免费提供,需收费提供)的设计上。以及其它大容量存储项目上。
qq:292942278   e-mail:tony_yang123@sina.com

0.png

下载:
中页_nandflash_filesystem_with_page_2112bytes.rar (4.24 MB, 下载次数: 33)
回复

使用道具 举报

ID:1 发表于 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. 函数
  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. /*  建立一个目录CREATE_FOLDER_TEST,以测试建立目录函数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下建立一个文件,以测试建立目录函数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.    ,以测试重命名文件函数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("开始写连续文件");

  434. scanf("%c",&a);scanf("%c",&a);
  435. //delete_file(ddd);
  436. /* 在OK目录下连续写文件,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;      //设置disk_enumeration列举mode(0)-复位至第一个文件项或目录项开始枚举
  564.   while(disk_enumeration(0,buf,mode,&ATTR) == SUCC)          //枚举一个目录项或目录项
  565.   {
  566.      printf("\nreaded entry=%s Attr = %x",buf,ATTR); //打印被枚举的一个目录项或目录项
  567.        
  568.      if(mode == 0)
  569.            mode = 1;    //设置disk_enumeration列举mode(1)- 继续上一枚举后的目录项或目录项
  570.          if(ATTR & ATTR_DIRECTORY)
  571.          {
  572.            buf[0]++;
  573.            create_floder(buf);                              //建一个disk_enumeration的目录
  574.            continue;
  575.          }
  576.          else                                                                   //复制文件
  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{                                                                     //复制文件
  589.             cc = read_file(HANDLE1,buf+400,500000);                                //读文件
  590.                 printf("\nreaded chars = %ld ",cc);                   //打印读文件读取的字节数
  591.         if(write_file(HANDLE2,buf+400,cc)==Disk_is_full)
  592.                 {close_file(HANDLE1);                                 //文件复制结束,关闭文件
  593.                  close_file(HANDLE2);
  594.                         break;                                       //将读取的字节写去DISK1上的文件
  595.                 }
  596.                 if(cc != 500000)                                 //检查读取的字节数,确认文件尾
  597.                 {
  598.                  close_file(HANDLE1);                                 //文件复制结束,关闭文件
  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;      //设置disk_enumeration列举mode(0)-复位至第一个文件项或目录项开始枚举
  612.   while(disk_enumeration(0,buf,mode,&ATTR) == SUCC)          //枚举一个目录项或目录项
  613.   {
  614.      printf("\nreaded entry=%s Attr = %x",buf,ATTR); //打印被枚举的一个目录项或目录项
  615.        
  616.      if(mode == 0)
  617.            mode = 1;    //设置disk_enumeration列举mode(1)- 继续上一枚举后的目录项或目录项
  618.          if(ATTR & ATTR_DIRECTORY)
  619.          {
  620.            buf[0]++;
  621.            create_floder(buf);                              //建一个disk_enumeration的目录
  622.            continue;
  623.          }
  624.          else                                                                   //复制文件
  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{                                                                     //复制文件
  635.             cc = read_file(HANDLE1,buf+400,50000);                                //读文件
  636.                 printf("\nreaded chars = %ld ",cc);                   //打印读文件读取的字节数
  637.         cc = write_file(HANDLE2,buf+400,cc);                //将读取的字节写去DISK1上的文件
  638.                 if(cc != 50000)                                 //检查读取的字节数,确认文件尾
  639.                 {
  640.                  close_file(HANDLE1);                                 //文件复制结束,关闭文件
  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 创建成功!\n");
  670.         }
  671.        
  672.         ret = create_file("C:\\newFolder_0\\newFile_1");
  673.         if (ret == 0)
  674.         {
  675.                 printf("newFolder_0\\newFile_1 创建成功!\n");
  676.         }
  677.         ret = create_file("C:\\newFolder_0\\newFile_2");
  678.         if (ret == 0)
  679.         {
  680.                 printf("newFolder_0\\newFile_2 创建成功!\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()函数把没有后缀的文件当成文件夹。--解决了
  701.   if(cd_folder("folder",0)==0)
  702.   {
  703.     printf("\n进入目录成功!");
  704.   
  705.   }
  706.   else
  707.   {
  708.         printf("\n进入目录失败!");
  709.   
  710.   }
  711.   //2、create_floder()可以创建带".*"后缀的文件夹,但是folder_enumeration()无法识别(WinImage可以识别为文件夹)。
  712.   //测试结果,可以识别的啊
  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()创建文件后,名称的英文字符会全部变成大写。
  723.   //测试结果----通过WINIMG查看--大小写未变啊!
  724.   create_file("c:\\aaaaaaaaAAAAAAAAAAAAA");


  725.   //4、rename_file()函数重命名文件和文件夹后,名称的英文字符会全部变成大写。
  726.   //代码已经修改--已经解决了
  727.   create_file("c:\\olderFile");
  728.   rename_file("c:\\olderFile","NewFile");


  729.   //5、rename_file()可以把文件夹修改为带".*"后缀的名称,修改成功后无法用cd_folder()进入,用
  730.   //   WinImage打开识别为后缀名类型的文件。
  731.   //6、rename_file()函数重命名文件夹成功后,folder_enumeration()可以识别(用WinImage无法识别文
  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()函数可以删除文件夹,删除成功后文件夹消失,但是空间并没有释放。
  744.   //代码已修改,现在delete_file()不能删除文件夹
  745.   //删除文件夹请用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、添加获取文件夹和文件的属性的函数:包括:是不是文件夹、名称、大小、创建时间,修改时间等。

  756.   //获取文件的访问,建立,修改时间,文件大小       
  757.   create_file("test.txt");
  758.   handle = open_file("test.txt");//写入文件50000个字节
  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这是一个文件夹");
  772.         }
  773.         else
  774.         {
  775.            printf("\n这是一个文件");
  776.         }
  777.         printf("\nfile_size = %d",ATTR2.file_size);
  778.   }
  779.   else
  780.   {
  781.     printf("FAIL");
  782.   }

  783.    //获取目录的访问,建立,修改时间
  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这是一个文件夹");
  796.         }
  797.         else
  798.         {
  799.            printf("\n这是一个文件");
  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是一个目录");break;
  812.     case The_FILE:printf("\n文件c:\\test.txt是一个文件");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是一个目录");break;
  819.     case The_FILE:printf("\n文件c:\\test是一个文件");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是一个目录");break;
  825.     case The_FILE:printf("\n文件c:\\not_exist是一个文件");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. */

复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表