標題:
Cheap_Flash_FS--嵌入式NandFlash文件系統(tǒng)源碼(使用極速版代碼)下載
[打印本頁]
作者:
figureyang
時間:
2017-4-24 10:37
標題:
Cheap_Flash_FS--嵌入式NandFlash文件系統(tǒng)源碼(使用極速版代碼)下載
Cheap_Flash_FS--嵌入式NandFlash文件系統(tǒng)源碼(使用極速版代碼)下載
Cheap_Flash_FS 代碼已經由我們開發(fā)完成,并經過了嚴格的測試。
壞塊管理功能包括基于壞塊表的管理程序,可以提供單/多扇區(qū)的操作。
多扇區(qū)為nandflash專門設計,可以降低NANDFLASH物理擦除數(shù),具有FLASH上直接預分配功能。
其上面可以運行(Cheap_Flash_FS(支持多扇區(qū)操作))文件系統(tǒng)。
文件系統(tǒng)可支持實時壞塊替換,包括擦除塊,塊移動,寫入頁產生壞塊。文件系統(tǒng)基于NAND_FLASH壞塊管理層驅動運行。
NAND_FLASH壞塊管理支持ECC糾錯,對每個扇區(qū)執(zhí)行二次ECC糾錯,保證數(shù)據(jù)正確的讀出。
NAND_FLASH壞塊管理層如果發(fā)現(xiàn)Unrecoverable_error扇區(qū),可把扇區(qū)讀出置為0,等于目錄已結束,避免了文件系統(tǒng)運行出錯。
本代碼是32BIT的壞塊表文件系統(tǒng),可支持大于4G的nandflash,包括小頁,中頁,大頁,用于用戶代碼測試!
可以用于U盤和SD卡(BLOCK_ERASE代碼不免費提供,需收費提供)的設計上。以及其它大容量存儲項目上。
qq:292942278 e-mail:tony_yang123@sina.com
0.png
(56.63 KB, 下載次數(shù): 215)
下載附件
2017-4-24 16:32 上傳
下載:
中頁_nandflash_filesystem_with_page_2112bytes.rar
(4.24 MB, 下載次數(shù): 33)
2017-4-24 10:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2017-4-24 16:34
好資料,下面是樓主的主程序main.c文件:
/*
+FHDR------------------------------------------------------------------
Copyright (c),
Tony Yang –USB,FAT firmware development
Contact:qq 292942278 e-mail:tony_yang123@sina.com.cn
;;;;;;;;;;
Abstract:
Sector Read/Write Driver
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$Id: flash_management.c,v 1.1.1.1 2007/02/26 14:01:12 Design Exp $
-FHDR-------------------------------------------------------------------
*/
#include "stdio.h"
#include "include\types.h"
#include "fat\fat.h"
#include "Flash_Management\Flash_Management.h"
#include "include\FAT_cfg.h"
#define main__
#ifdef main__
extern struct core_ CORE[maximum_disks];;
//extern u8 bit_map_modified[FAT_Sector_Num];;
//extern u32 FirstSectorofCluster(u32 N);
//extern u8 fill_fat_table_on_close_file(u32 first_cluster,u32 FIRST_CLUSTER,u32 ENDCluster,u8 *buf,u8 disk_id);
/*
===============================================================================
函數(shù)
main();
入口:無
出口:無
===============================================================================
*/
static FILE *file2;
void main(void)
{
#if 1
u32 cc,bb,i,cluster,added_cluster,number_of_clusters,last_cluster;
u16 COUNT;
u8 a,j,ATTR,mode;
u8 HANDLE1,HANDLE2;
u8 buf[655360];
struct attribute ATTR2;
struct attribute ATTRIBUTE;
u8 ddd[] = "c:\\ok\\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa我們aaaaaAAAAAAAAAAAaaaaaaaaa.rar";
NandFlash_Initialization();
Makeup_Block_BAD_Table();
flash_management_sysinit();
/* if((file2 = fopen("fat32.img","wb+")) == NULL)
{
return;
}
for(i = 0;i<150000*2;i+=32)
{
read_flash_sector(buf,i,0,32);
cc = fwrite(buf,1,512*32,file2);
}
scanf("%c",&i);
scanf("%c",&i);
scanf("%c",&i);
scanf("%c",&i);
*/
FAT_filesystem_autoformat('C',FAT32,150000*2);
FAT_filesystem_autoformat('D',FAT16,270336);
FAT_filesystem_initialiation();
Allocate_An_Empty_cluster(&cluster,buf,0);
printf("cluster=%d",cluster);
/*create_file("grd g .txt");
*/
/*cd_folder("d:\\",0);
a = 0;
while(folder_enumeration(buf,a,&ATTR2) == SUCC)
{
printf("\nreaded entry=%s Attr = %x",buf,ATTR);
//if(a == 0)
// delete_folder(buf);
if(a == 0)
a = 1;
}
scanf("%c",&i);*/
//return;
//printf("格式化完成");
//scanf("%c",&i);
//disk_id = 1;
//Allocate_An_Empty_cluster(&cluster,buf,0);
//printf("cluster=%d",cluster);
//fill_fat_table_close_file(cluster,cluster+1,1000,buf,1);
//return;
/*create_file("d:\\test.txt");
HANDLE1 = open_file("d:\\test.txt");
write_file(HANDLE1,buf,500000);
close_file(HANDLE1);
printf("寫文件完成");
read_flash_sector(buf,1,1,1);
buf[100] = 0xff;
buf[101] = 0xff;
buf[102] = 0xff;
buf[103] = 0xf;
write_flash_sector(buf,1,1,1);
scanf("%c",&i);
delete_file("d:\\test.txt");
return;*/
// disk_id = 1;
// printf("first = %d",FirstSectorofCluster(156));
// scanf("%c",&i);
/*
disk_id = 1;
Allocate_An_Empty_cluster(&cluster,buf,0);
printf("cluster=%d",cluster);
scanf("%c",&a);scanf("%c",&a);
number_of_clusters = 1000;
Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
printf("added_cluster =%d,number_of_clusters =%d,last_cluster=%d",added_cluster,number_of_clusters,last_cluster);
scanf("%c",&a);scanf("%c",&a);
Allocate_An_Empty_cluster(&cluster,buf,0);
printf("cluster=%d",cluster);
scanf("%c",&a);scanf("%c",&a);
number_of_clusters = 1000;
Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
printf("added_cluster =%d,number_of_clusters =%d,last_cluster=%d",added_cluster,number_of_clusters,last_cluster);
scanf("%c",&a);scanf("%c",&a);
return;*/
read_flash_sector(buf,36,0,1);
buf[100] = 0xff;
buf[101] = 0xff;
buf[102] = 0xff;
buf[103] = 0xf;
#if 1
buf[16] = 0xff;
buf[17] = 0xff;
buf[18] = 0xff;
buf[19] = 0xf;
buf[48] = 0xff;
buf[49] = 0xff;
buf[50] = 0xff;
buf[51] = 0xf;
buf[32] = 0xff;
buf[33] = 0xff;
buf[34] = 0xff;
buf[35] = 0xf;
#endif
buf[108] = 0xff;
buf[109] = 0xff;
buf[110] = 0xff;
buf[111] = 0xf;
write_flash_sector(buf,36,0,1);
#if 0
scanf("%c",&a);
number_of_clusters = 6;
Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
number_of_clusters = 6;
Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
number_of_clusters = 6;
Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
number_of_clusters = 6;
Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
number_of_clusters = 6;
Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
number_of_clusters = 6;
Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
scanf("%c",&a);
#endif
/* cd_folder("d:\\",0);
create_file("myfile.rar");
HANDLE1 = open_file("myfile.rar");
if((file2 = fopen("readed.rar","rb+")) == NULL)
{
return;
}
if(HANDLE1 != FAIL)
{
do{
printf("#");
cc = fread(buf,1,500000,file2);
if(write_file(HANDLE1,buf, cc)==Disk_is_full)
break;
if(cc < 500000)
break;
}while(1);
}
close_file(HANDLE1);
return;*/
/*
printf("copy file");
scanf("%c",&a);scanf("%c",&a);
HANDLE1 = open_file("myfile.rar");
create_file("myfile2.rar");
HANDLE2 = open_file("myfile2.rar");
do{
printf("#");
cc = read_file(HANDLE1,buf,500000);
if(write_file(HANDLE2,buf, cc)==Disk_is_full)
break;
if(cc < 500000)
break;
}while(1);
scanf("%c",&a);scanf("%c",&a);
//return;
close_file(HANDLE1);
close_file(HANDLE2);
// return;*/
#if 0
create_file("aa.rar");
HANDLE1 = open_file("aa.rar");
write_file(HANDLE1,buf,500000);
write_file(HANDLE1,buf,500000);
write_file(HANDLE1,buf,500000);
write_file(HANDLE1,buf,500000);
write_file(HANDLE1,buf,500000);
write_file(HANDLE1,buf,500000);
write_file(HANDLE1,buf,500000);
write_file(HANDLE1,buf,500000);
close_file(HANDLE1);
HANDLE1 = open_file("aa.rar");
if((file2 = fopen("readed.rar","rb+")) == NULL)
{
return;
}
do{
printf("#");
cc = fread(buf,1,500000,file2);
if(write_file(HANDLE1,buf, cc)==Disk_is_full)
break;
if(cc < 500000)
break;
}while(1);
close_file(HANDLE1);
//printf("close_file");
fclose(file2);
#endif
// return;
cd_folder("d:\\",0);
create_floder("中文目錄");
create_floder("中文目錄\\中文目錄");
create_file("中文目錄\\文件1.txt");
create_file("中文目錄\\文件2.txt");
create_file("中文目錄\\2.txt");
HANDLE1 = open_file("中文目錄\\2.txt");
write_file(HANDLE1,buf,500000);
write_file(HANDLE1,buf,500000);
write_file(HANDLE1,buf,500000);
write_file(HANDLE1,buf,500000);
write_file(HANDLE1,buf,500000);
write_file(HANDLE1,buf,500000);
write_file(HANDLE1,buf,500000);
write_file(HANDLE1,buf,500000);
close_file(HANDLE1);
//cd_folder("d:\\",0);
create_file("中文目錄\\3.txt");
HANDLE1 = open_file("中文目錄\\3.txt");
write_file(HANDLE1,buf,500000);
close_file(HANDLE1);
printf("write_complete");
scanf("%c",&i);
delete_file("中文目錄\\2.txt");
scanf("%c",&i);
//return;
cd_folder("中文目錄",0);
a = 0;
while(folder_enumeration(buf,a,&ATTR2) == SUCC)
{
printf("\nreaded entry=%s Attr = %x",buf,ATTR);
printf("\naccess time: %d-%d-%d",ATTR2.access_time_year,ATTR2.access_time_month,ATTR2.access_time_day);
printf("\ncreate time: %d-%d-%d",ATTR2.create_time_year,ATTR2.create_time_month,ATTR2.create_time_day);
printf("\ncreate time: %d:%d:%d",ATTR2.create_time_hour,ATTR2.create_time_minute,ATTR2.create_time_second);
printf("\nmodify time: %d-%d-%d",ATTR2.modify_time_year,ATTR2.modify_time_month,ATTR2.modify_time_day);
printf("\nmodify time: %d:%d:%d",ATTR2.modify_time_hour,ATTR2.modify_time_minute,ATTR2.modify_time_second);
printf("\nattr=%x",ATTR2.attr);
printf("\nFILESIZE=%x",ATTR2.file_size);
if(a == 0)
a = 1;
}
cd_folder("中文目錄",0);
a = 0;
while(folder_enumeration(buf,a,&ATTR2) == SUCC)
{
printf("\nreaded entry=%s Attr = %x",buf,ATTR);
printf("\naccess time: %d-%d-%d",ATTR2.access_time_year,ATTR2.access_time_month,ATTR2.access_time_day);
printf("\ncreate time: %d-%d-%d",ATTR2.create_time_year,ATTR2.create_time_month,ATTR2.create_time_day);
printf("\ncreate time: %d:%d:%d",ATTR2.create_time_hour,ATTR2.create_time_minute,ATTR2.create_time_second);
printf("\nmodify time: %d-%d-%d",ATTR2.modify_time_year,ATTR2.modify_time_month,ATTR2.modify_time_day);
printf("\nmodify time: %d:%d:%d",ATTR2.modify_time_hour,ATTR2.modify_time_minute,ATTR2.modify_time_second);
printf("\nattr=%x",ATTR2.attr);
printf("\nFILESIZE=%x",ATTR2.file_size);
if(a == 0)
a = 1;
}
/*bit_map_modified[0] = 1;
bit_map_modified[1] = 1;
bit_map_modified[4] = 1;
bit_map_modified[5] = 1;
bit_map_modified[6] = 1;
bit_map_modified[28] = 1;
bit_map_modified[29] = 1;
bit_map_modified[30] = 1;
bit_map_modified[31] = 1;
bit_map_modified[32] = 1;
bit_map_write();
while(1);*/
///disk_id =1;
Allocate_An_Empty_cluster(&cluster,buf,0);
printf("cluster=%d",cluster);
/* scanf("%c",&a);
number_of_clusters = 6;
Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
number_of_clusters = 6;
Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
number_of_clusters = 6;
Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
number_of_clusters = 6;
Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
number_of_clusters = 6;
Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
number_of_clusters = 6;
Allocate_NUMBERS_OF_EMPTY_CLUSTER_TO_CUR_CLUSTER_CHAIN(cluster,&added_cluster,&last_cluster,buf,0,&number_of_clusters);
printf("cluster=%d added_cluster =%d last_cluster=%d number_of_clusters=%d\n",cluster,added_cluster,last_cluster,number_of_clusters);
scanf("%c",&a);
//return;*/
#if 1
volume_inquiry('c',&cc,&bb);
printf("Volume C Capacity: %ld\n",cc);
printf("Volume C FreeSpace: %ld\n",bb);
volume_inquiry('d',&cc,&bb);
printf("Volume D Capacity: %ld\n",cc);
printf("Volume D FreeSpace: %ld\n",bb);
scanf("%c",&a);
scanf("%c",&a);
//return;
create_floder("D:\\ok");
create_file("d:\\ok\\1_1.txt");
HANDLE1 = open_file("d:\\ok\\1_1.txt");
if(HANDLE1 == 0XFF)
{
printf("open file failed");
scanf("%c",&a);
}
for(i = 0;i<10000;i++)
buf[i] = 0x55;
write_file(HANDLE1,buf,10000);
write_file(HANDLE1,buf,10000);
write_file(HANDLE1,buf,10000);
write_file(HANDLE1,buf,10000);
f_seek(HANDLE1,200,SEEK_SET);
for(i = 0;i<100;i++)
buf[i] = i;
write_file(HANDLE1,buf,100);
close_file(HANDLE1);
//scanf("%c",&a);
/* 建立一個目錄CREATE_FOLDER_TEST,以測試建立目錄函數(shù)create_floder() */
create_floder("D:\\aaaaaaaaaa");
create_floder("d:\\aaaaaaaaaa");
create_floder("aaaaaaaaaaA");
create_floder("aaaaaaaaaaA");
create_file("D:\\aaaaaaaaaaAA我們.TXT");
create_file("c:\\aaaaaaaaaaAA.TXT");
create_floder("C:\\AAAAAAAAAAAaaaaaa");
create_floder("D:\\AAAAAAAAAAAaaaaaa");
create_floder("c:\\CREATE_FOLDER_TEST");
create_floder("D:\\CREATE_FOLDER_TEST");
scanf("%c",&a);
if(get_file_attribute("c:\\aaaaaaaaaaAA.TXT", The_FILE, &ATTRIBUTE)== SUCC)
{ printf("\n文件:aaaaaaaaaaAA.TXT");
printf("\naccess time: %d-%d-%d",ATTRIBUTE.access_time_year,ATTRIBUTE.access_time_month,ATTRIBUTE.access_time_day);
printf("\ncreate time: %d-%d-%d",ATTRIBUTE.create_time_year,ATTRIBUTE.create_time_month,ATTRIBUTE.create_time_day);
printf("\ncreate time: %d:%d:%d",ATTRIBUTE.create_time_hour,ATTRIBUTE.create_time_minute,ATTRIBUTE.create_time_second);
printf("\nmodify time: %d-%d-%d",ATTRIBUTE.modify_time_year,ATTRIBUTE.modify_time_month,ATTRIBUTE.modify_time_day);
printf("\nmodify time: %d:%d:%d",ATTRIBUTE.modify_time_hour,ATTRIBUTE.modify_time_minute,ATTRIBUTE.modify_time_second);
printf("\nattr=%x",ATTR2.attr);
}
else
{
printf("FAIL");
}
scanf("%c",&a);
/* 在目錄CREATE_FOLDER_TEST下建立一個文件,以測試建立目錄函數(shù)create_file() */
create_file("C:\\CREATE_FOLDER_TEST\\created_file.txt");
create_file("D:\\CREATE_FOLDER_TEST\\created_file.txt");
create_file("C:\\CREATE_FOLDER_TEST\\AAAAAAAAAAB");
create_file("D:\\CREATE_FOLDER_TEST\\AAAAAAAAAABaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
create_file("D:\\CREATE_FOLDER_TEST\\AAAAAAAAAABB");
create_file("D:\\CREATE_FOLDER_TEST\\AAAAAAAAAABBBB");
create_file("D:\\ok\\aa.rarc");
//printf("\n\n rename_folder");
rename_folder("C:\\CREATE_FOLDER_TEST","short");
//printf("\n\n exit rename_folder");
/* 重命令文件CREATE_FOLDER_TEST\\created_file.txt為"DFDFDFDFDFDFDFDFSDFSDTONY.TXT"
,以測試重命名文件函數(shù)rename_file() */
//rename_file("ok\\bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.RAR","DFDFDFDFDFDFDFDFSDFSDTONY.TXT");
//scanf("%c",&a);
/* 刪除文件CREATE_FOLDER_TEST\\created_file.txt */
//delete_file("ok\\ZZZZZZZZZZZZZZZUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.RAR");
/* 刪除目錄CREATE_FOLDER_TEST */
//delete_folder("CREATE_FOLDER_TEST");
/* 列舉CREATE_FOLDER_TEST目錄下面的所有文件,打印到屏幕 */
cd_folder("C:\\short",0);
a = 0;
while(folder_enumeration(buf,a,&ATTR2) == SUCC)
{
printf("\nreaded entry=%s Attr = %x",buf,ATTR);
if(a == 0)
a = 1;
}
scanf("%c",&a);
cd_folder(" ",1);
/* 列舉根目錄的文件,打印去屏幕 */
a = 0;
while(folder_enumeration(buf,a,&ATTR2) == SUCC)
{
printf("\nreaded entry=%s Attr = %x",buf,ATTR);
if(a == 0)
a = 1;
}
printf("開始寫連續(xù)文件");
scanf("%c",&a);scanf("%c",&a);
//delete_file(ddd);
/* 在OK目錄下連續(xù)寫文件,readed.rar,直到磁盤被寫滿 */
create_floder("c:\\ok");
j = 0;
COUNT = 0;
do{
for(a = 0;a < 25; a++)
{
COUNT++;
//printf("close_file");
if(create_file(ddd) == SUCC)//File_already_exist)
{
printf("Create file %s successfully\n",ddd);
HANDLE1 = open_file(ddd);
if((file2 = fopen("readed.rar","rb+")) == NULL)
{
return;
}
if(HANDLE1 != FAIL)
{
printf("\nOpen File %s successfully",ddd);
do{
printf("#");
cc = fread(buf,1,500000,file2);
if(write_file(HANDLE1,buf, cc)==Disk_is_full)
break;
//write_file(HANDLE1,buf, cc);
if(cc < 500000)
break;
}while(1);
close_file(HANDLE1);
//printf("close_file");
fclose(file2);
//break;
//return;
}
else
printf("\nOpen File %s failed",ddd);
}
else
printf("Create file %s failed\n",ddd);
ddd[6+j] ++;
}
//break;
j++;
}while(j< 20);
printf("CORE[disk_id].min_cluster_for_allocat=%d",CORE[0].min_cluster_for_allocat);
scanf("%c",&a);
//return;
/*
scanf("%c",&a);
cd_folder("c:\\ok",0);
a = 0;
while(folder_enumeration(buf,a,&ATTR) == SUCC)
{
printf("\nreaded entry=%s Attr = %x",buf,ATTR);
delete_file(buf);
if(a == 0)
a = 1;
}
a = delete_folder("c:\\ok");
if(a == SUCC)
printf("delete_folder c:\\ok 成功");
else if(a == Folder_for_delete_not_exist)
printf("Folder_for_delete_not_exist");
else if(a == Folder_is_not_empty)
printf("Folder_is_not_empty");
scanf("%c",&a);*/
/* 分離磁盤0中的所有文件 */
/* 分離磁盤0中的所有文件 */
printf(" /* 分離磁盤0中的所有文件 */");
scanf("%c",&a);
a = 0;
while(disk_enumeration(0,buf,a,&ATTR) == SUCC)
{
printf("\nreaded entry=%s Attr = %x",buf,ATTR);
if(a == 0)
a = 1;
///printf("write 6 failed!");
if(ATTR & ATTR_DIRECTORY)
{
mkdir(buf+3);
continue;
}
else
{//printf("write 5 failed!");
if ((file2 = fopen(buf+3,"wb+")) == NULL)
{
return;
}
else
HANDLE1 = open_file(buf);
}
//printf("write 4 failed! %d",HANDLE1);
if(HANDLE1 != FAIL)
do{
// printf("read 21 failed!");
cc = read_file(HANDLE1,buf+400,55000);
//printf("read failed!");
printf("\nreaded chars = %ld ",cc);
fwrite(buf+400,1,cc,file2);
//printf("write failed!");
if(cc != 55000)
{
close_file(HANDLE1);
break;
}
}while(1);
else{
printf("Openfile failed!");
}
fclose(file2);
}
scanf("%c",&a);
scanf("%c",&a);
#endif
#endif
#define new_
#ifdef new_
printf("開始拷貝文件");
scanf("%c",&a);
scanf("%c",&a);
/* DISK0 拷貝至DISK1 */
mode = 0; //設置disk_enumeration列舉mode(0)-復位至第一個文件項或目錄項開始枚舉
while(disk_enumeration(0,buf,mode,&ATTR) == SUCC) //枚舉一個目錄項或目錄項
{
printf("\nreaded entry=%s Attr = %x",buf,ATTR); //打印被枚舉的一個目錄項或目錄項
if(mode == 0)
mode = 1; //設置disk_enumeration列舉mode(1)- 繼續(xù)上一枚舉后的目錄項或目錄項
if(ATTR & ATTR_DIRECTORY)
{
buf[0]++;
create_floder(buf); //建一個disk_enumeration的目錄
continue;
}
else //復制文件
{ HANDLE1 = open_file(buf); //打開文件
buf[0]++;
create_file(buf); //在DISK1上建立文件
}
if(HANDLE1 != FAIL)
{ HANDLE2 = open_file(buf); //打開DISK1上建立的文件
if(HANDLE2 == FAIL)
break;
if(HANDLE2 == The_disk_is_full)
break;
do{ //復制文件
cc = read_file(HANDLE1,buf+400,500000); //讀文件
printf("\nreaded chars = %ld ",cc); //打印讀文件讀取的字節(jié)數(shù)
if(write_file(HANDLE2,buf+400,cc)==Disk_is_full)
{close_file(HANDLE1); //文件復制結束,關閉文件
close_file(HANDLE2);
break; //將讀取的字節(jié)寫去DISK1上的文件
}
if(cc != 500000) //檢查讀取的字節(jié)數(shù),確認文件尾
{
close_file(HANDLE1); //文件復制結束,關閉文件
close_file(HANDLE2);
break;
}
}while(1);
}
else
{
printf("Openfile failed!");
}
}
#else
/* DISK0 拷貝至DISK1 */
mode = 0; //設置disk_enumeration列舉mode(0)-復位至第一個文件項或目錄項開始枚舉
while(disk_enumeration(0,buf,mode,&ATTR) == SUCC) //枚舉一個目錄項或目錄項
{
printf("\nreaded entry=%s Attr = %x",buf,ATTR); //打印被枚舉的一個目錄項或目錄項
if(mode == 0)
mode = 1; //設置disk_enumeration列舉mode(1)- 繼續(xù)上一枚舉后的目錄項或目錄項
if(ATTR & ATTR_DIRECTORY)
{
buf[0]++;
create_floder(buf); //建一個disk_enumeration的目錄
continue;
}
else //復制文件
{ HANDLE1 = open_file(buf); //打開文件
buf[0]++;
create_file(buf); //在DISK1上建立文件
}
if(HANDLE1 != FAIL)
{ HANDLE2 = open_file(buf); //打開DISK1上建立的文件
if(HANDLE2 == FAIL)
break;
do{ //復制文件
cc = read_file(HANDLE1,buf+400,50000); //讀文件
printf("\nreaded chars = %ld ",cc); //打印讀文件讀取的字節(jié)數(shù)
cc = write_file(HANDLE2,buf+400,cc); //將讀取的字節(jié)寫去DISK1上的文件
if(cc != 50000) //檢查讀取的字節(jié)數(shù),確認文件尾
{
close_file(HANDLE1); //文件復制結束,關閉文件
close_file(HANDLE2);
break;
}
}while(1);
}
else
{
printf("Openfile failed!");
}
}
#endif
scanf("%c",&a);
#else
#endif
}
#if 0
void main(void)
{
u8 ret,buf[65536],ATTR;
u8 a;
u8 handle;
struct attribute ATTRIBUTE;
ret = flash_management_sysinit();
ret = FAT_filesystem_autoformat('C',FAT32,270336*2*2);
ret = FAT_filesystem_initialiation();
ret = create_floder("C:\\newFolder_0");
if (ret == 0)
{
printf("newFolder_0 創(chuàng)建成功!\n");
}
ret = create_file("C:\\newFolder_0\\newFile_1");
if (ret == 0)
{
printf("newFolder_0\\newFile_1 創(chuàng)建成功!\n");
}
ret = create_file("C:\\newFolder_0\\newFile_2");
if (ret == 0)
{
printf("newFolder_0\\newFile_2 創(chuàng)建成功!\n");
}
ret = delete_file("C:\\newFolder_0\\newFile_1");
if (ret == 0)
{
printf("newFolder_0\\newFile_1 刪除成功!\n");
}
ret = delete_file("C:\\newFolder_0\\newFile_2");
if (ret == 0)
{
printf("newFolder_0\\newFile_2 刪除成功!\n");
}
cd_folder("C:\\newFolder_0",1);
ret = delete_folder("C:\\newFolder_0");//成功
if (ret == 0)
{
printf("newFolder_0 刪除成功!\n\n");
}
else
printf("newFolder_0 刪除失。n\n");
create_file("folder"); //1、cd_folder()函數(shù)把沒有后綴的文件當成文件夾。--解決了
if(cd_folder("folder",0)==0)
{
printf("\n進入目錄成功!");
}
else
{
printf("\n進入目錄失敗!");
}
//2、create_floder()可以創(chuàng)建帶".*"后綴的文件夾,但是folder_enumeration()無法識別(WinImage可以識別為文件夾)。
//測試結果,可以識別的啊
cd_folder("c:\\",0);
create_floder("CREATE_FOLDER.*");
a = 0;
while(folder_enumeration(buf,a,&ATTR2) == SUCC)
{
printf("\nreaded entry=%s Attr = %x",buf,ATTR);
if(a == 0)
a = 1;
}
//3、create_file()創(chuàng)建文件后,名稱的英文字符會全部變成大寫。
//測試結果----通過WINIMG查看--大小寫未變啊!
create_file("c:\\aaaaaaaaAAAAAAAAAAAAA");
//4、rename_file()函數(shù)重命名文件和文件夾后,名稱的英文字符會全部變成大寫。
//代碼已經修改--已經解決了
create_file("c:\\olderFile");
rename_file("c:\\olderFile","NewFile");
//5、rename_file()可以把文件夾修改為帶".*"后綴的名稱,修改成功后無法用cd_folder()進入,用
// WinImage打開識別為后綴名類型的文件。
//6、rename_file()函數(shù)重命名文件夾成功后,folder_enumeration()可以識別(用WinImage無法識別文
//件夾,文件類型變成了"本地磁盤")。
//通過修改代碼,rename_file只能修改文件的名稱
create_floder("c:\\olderFolderName");
if(rename_file("c:\\olderFolderName","NewFileName")==0)
{
printf("\nrename_file()修改文件夾成功!");
}
else
{
printf("\nrename_file()修改文件夾失敗!");
}
//7、delete_file()函數(shù)可以刪除文件夾,刪除成功后文件夾消失,但是空間并沒有釋放。
//代碼已修改,現(xiàn)在delete_file()不能刪除文件夾
//刪除文件夾請用delete_folder()
create_floder("c:\\tempfolder");
if(delete_file("c:\\tempfolder") == 0)
{
printf("\ndelete_file()刪除文件夾成功!");
}
else
{
printf("\ndelete_file()刪除文件夾失敗!");
}
//1、添加獲取文件夾和文件的屬性的函數(shù):包括:是不是文件夾、名稱、大小、創(chuàng)建時間,修改時間等。
//獲取文件的訪問,建立,修改時間,文件大小
create_file("test.txt");
handle = open_file("test.txt");//寫入文件50000個字節(jié)
write_file(handle,buf,50000);
close_file(handle);
if(get_file_attribute("test.txt", The_FILE, &ATTRIBUTE)== SUCC)
{
printf("\n文件:test.txt\naccess time: %d-%d-%d",ATTR2.access_time_year,ATTR2.access_time_month,ATTR2.access_time_day);
printf("\ncreate time: %d-%d-%d",ATTR2.create_time_year,ATTR2.create_time_month,ATTR2.create_time_day);
printf("\ncreate time: %d:%d:%d",ATTR2.create_time_hour,ATTR2.create_time_minute,ATTR2.create_time_second);
printf("\nmodify time: %d-%d-%d",ATTR2.modify_time_year,ATTR2.modify_time_month,ATTR2.modify_time_day);
printf("\nmodify time: %d:%d:%d",ATTR2.modify_time_hour,ATTR2.modify_time_minute,ATTR2.modify_time_second);
printf("\nattr=%x",ATTR2.attr);
if(ATTR2.attr & ATTR_DIRECTORY)
{
printf("\n這是一個文件夾");
}
else
{
printf("\n這是一個文件");
}
printf("\nfile_size = %d",ATTR2.file_size);
}
else
{
printf("FAIL");
}
//獲取目錄的訪問,建立,修改時間
create_floder("test");
if(get_file_attribute("test", The_DIRECTORY, &ATTRIBUTE)== SUCC)
{
printf("\n目錄:test\naccess time: %d-%d-%d",ATTR2.access_time_year,ATTR2.access_time_month,ATTR2.access_time_day);
printf("\ncreate time: %d-%d-%d",ATTR2.create_time_year,ATTR2.create_time_month,ATTR2.create_time_day);
printf("\ncreate time: %d:%d:%d",ATTR2.create_time_hour,ATTR2.create_time_minute,ATTR2.create_time_second);
printf("\nmodify time: %d-%d-%d",ATTR2.modify_time_year,ATTR2.modify_time_month,ATTR2.modify_time_day);
printf("\nmodify time: %d:%d:%d",ATTR2.modify_time_hour,ATTR2.modify_time_minute,ATTR2.modify_time_second);
printf("\nattr=%x",ATTR2.attr);
if(ATTR2.attr & ATTR_DIRECTORY)
{
printf("\n這是一個文件夾");
}
else
{
printf("\n這是一個文件");
}
}
else
{
printf("FAIL");
}
//1. 判斷該文件是文件夾還是文件
printf("\n\n1. 判斷該文件是文件夾還是文件");
create_file("c:\\test.txt");
switch (check_type("c:\\test.txt"))
{
case The_DIRECTORY:printf("\n文件c:\\test.txt是一個目錄");break;
case The_FILE:printf("\n文件c:\\test.txt是一個文件");break;
case The_file_is_not_exist:printf("\n文件c:\\test.txt不存在");break;
}
create_floder("c:\\test");
switch (check_type("c:\\test"))
{
case The_DIRECTORY:printf("\n文件c:\\test是一個目錄");break;
case The_FILE:printf("\n文件c:\\test是一個文件");break;
case The_file_is_not_exist:printf("\n文件c:\\test不存在");break;
}
switch (check_type("c:\\not_exist"))
{
case The_DIRECTORY:printf("\n文件c:\\not_exist是一個目錄");break;
case The_FILE:printf("\n文件c:\\not_exist是一個文件");break;
case The_file_is_not_exist:printf("\n文件c:\\not_exist不存在");break;
}
//2.判斷文件夾或文件是否存在
printf("\n\n2.判斷文件夾或文件是否存在");
create_floder("c:\\temp");
if(check_exist("c:\\temp", The_DIRECTORY) == 0)
{
printf("\n\n目錄c:\\temp存在!");
}
else
{
printf("\n\n目錄c:\\temp不存在!");
}
create_file("c:\\file");
if(check_exist("c:\\file", The_FILE) == 0)
{
printf("\n\n文件c:\\file存在!");
}
else
{
printf("\n\n文件c:\\file不存在!");
}
if(check_exist("c:\\file_not_exist", The_FILE) == 0)
{
printf("\n\n文件c:\\file_not_exist存在!");
}
else
{
printf("\n\n文件c:\\file_not_exist不存在!");
}
scanf("%c",&ret);
}
#endif
/*
+FFTR--------------------------------------------------------------------
$Log: main.C,v $
Revision 1.12 2007/05/10 11:13:14 design
-FFTR--------------------------------------------------------------------
*/
復制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1