Truyen2U.Net quay lại rồi đây! Các bạn truy cập Truyen2U.Com. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

code.......

#include <stdio.h>

#include <dos.h>

#include <conio.h>

#include <stdlib.h>

#include <alloc.h>

//================================================================

const DISK_NUM = 2; //dinh dang cua no;2=USB;0=floppy....

//================================================================

#define READ_ONLY 0x01

#define HIDDEN 0x02

#define SYSTEM 0x04

#define VOLUME_LABEL 0x08

#define SUBDIRECTORY 0x10

#define ARCHIVE 0x20

#define DEVICE 0x40

#define UNUSED 0x80

//=================================================================

typedef struct {

char JumpCode[3];

char OemName[8];

unsigned int BytePerSector;

unsigned char SectorPerCluster;

unsigned int ReservedSectors;

unsigned char FatCopies;

unsigned int RootDirEntries;

unsigned int NumSectors;

unsigned char MediaType;

unsigned int SectorsPerFAT;

unsigned int SectorsPerTrack;

unsigned int NumberOfHeads;

unsigned long HiddenSectors;

unsigned long SectorsBig;

unsigned char PhysicalDriveNumber;

unsigned char Reserved;

char ExtendedBootSignature;

long VolumeID;

char VolumeLabel[11];

char FatTypeName[8];

char OSBootCode[448];

int BootSectorSignature;

}BOOTSECTOR;

//============================================================

typedef struct {

char FileName[8];

char Extension[3];

unsigned char Attribute;

unsigned char Reserved;

unsigned char CreateTime;

unsigned int CreateTime1;

unsigned int CreateDate;

unsigned int LastAccess;

unsigned int EA_Index;

unsigned int LastModTime;

unsigned int LastModDatel;

unsigned int FirstCluster;

unsigned long FileSize;

}DirectoryRoot;

//============================================================

void In_FAT(BOOTSECTOR &b)

{

int *p = (int *)malloc(b.BytePerSector);

if(p==NULL)

{

printf("

Ko du bo nho");

getch();

return ;

}

if(absread(DISK_NUM,1,b.ReservedSectors,p))

{

printf("

ko doc dc ");

getch();

return;

}

printf("

Thong tin 20 o dau tien cua bang FAT

");

for(i=0;i<20;++i)

printf("%d ",p[i]);

printf("

In xong");

free(p);

}

//============================================================

void FreeCluster(BOOTSECTOR &b)

{

int i,j;

unsigned long dem=0;

int *p = (int *)malloc(b.BytePerSector);

if(p==NULL)

{

printf("

Ko du bo nho");

getch();

return ;

}

for(i=0;i<b.SectorsPerFAT;++i)

{

if(absread(DISK_NUM,1,b.ReservedSectors+i,p))

{

printf("

ko doc dc ");

getch();

return;

}

for(j=0;j<b.BytePerSector/2;++j)

if(p[j]==0x0000)

++dem;

}

printf("

So Cluster trong la : %lu

",dem);

free(p);

}

//============================================================

void DefineClusterOfFile(BOOTSECTOR &b,unsigned long n)

{

unsigned long vitri = n;

int *p = (int *)malloc(b.BytePerSector);

if(p==NULL)

{

printf("

Ko du bo nho");

getch();

return ;

}

do

{

if(absread(DISK_NUM,1,b.ReservedSectors+((vitri*2)/b.BytePerSector),p))

{

printf("

ko doc dc ");

getch();

return;

}

printf("

Vi tri : %lu",vitri);

vitri = p[vitri%b.BytePerSector];

}while(vitri>=0x0002 && vitri<=0xFFEF);

free(p);

}

//============================================================

void KhoanMuc(BOOTSECTOR &b)

{

DirectoryRoot *d= (DirectoryRoot*)malloc(b.BytePerSector);

int i,j;

// vi tri cua sector cua thu muc goc:

unsigned int k = (unsigned int)b.ReservedSectors+(unsigned int)b.FatCopies*b.SectorsPerFAT;

if(absread(DISK_NUM,3,k,d))

{

printf("

ko doc dc ");

getch();

return;

}

for(i=0;i<48;++i)

{

if(d[i].FistCluster!=0 || d[i].FileName[0]!=-27)

{

printf("

File %d",i);

for(j=0;j<8;++j)

printf("

Ten File : %c",d[i].FileName[j]);

printf("

DIR = %d",!(d[i]. Attribute&ARCHIVE==ARCHIVE));

printf("

Cluster dau tien %u",d[i].FirstCluster);

printf("

Kich thuoc file %u",d[i].FileSize);

getch();

}

}

}

free(d);

}

//==================================================================

void main()

{

clrscr();

//Read Boot sector

BOOTSECTOR b;

printf("

Size = %d",sizeof(b));

if(absread(DISK_NUM,1,0,&b)!=0)

{

printf("

Disk problemed

");

getch();

}

else

{

printf("

Byte per Sector : %u",b.BytePerSector);

printf("

Sector per Cluster : %u",b.SectorPerCluster);

printf("

ReservedSectors : %u",b.ReservedSectors);

printf("

Fat Copy : %u",b.FatCopies);

printf("

RootDirEntries : %u",b.RootDirEntries);

printf("

Number Sector : %u",b.NumSectors);

printf("

Number of Heads : %x",b.NumberOfHeads);

printf("

Sector Big : %lu",b.SectorsBig);

printf("

Sectors per FAT : %u

",b.SectorsPerFAT);

printf("

PhysicalDriveNumber : %u

",b.PhysicalDriveNumber);

for(int i=0;i<8;++i)

printf("%c",b.OemName[i]);

printf("

Kieu o dia : %x",b.MediaType);

printf("

Volume ID : %x

",b.VolumeID);

for(i=0;i<11;++i)

printf("%c",b.VolumeLabel[i]);

printf("

");

for(i=0;i<8;++i)

printf("%c",b.FatTypeName[i]);

//Chuong trinh chinh

int chose;

unsigned long n;

do{

clrscr();

printf("

==========================Menu======================

1.In ra gia tri 20 o nho dau tien cua bang FAT.

2.In ra total free cluster.

3.In ra cac cluster cua 1 file biet file do bat dau tu cluster thu n.

4.Liet ke khoan muc.

0.Thoat khoi chuong trinh.");

scanf("%d",&chose);

switch(chose)

{

case 0:

{

chose=0;

break;

}

case 1:

{

In_FAT(b);

chose=1;

break;

}

case 2:

{

FreeCluster(b);

chose=1;

break;

}

case 3:

{

pritnf("

Nhap vao vi tri cluster bat dau cua file:");

scanf("%lu",&n);

DefineClusterOfFile(b,n);

chose=1;

break;

}

case 4:

{

KhoanMuc(b);

chose=1;

break;

}

default:

{

printf("

Nhap khong dung.

Chon 1 de thuc hien lai.Chon 0 de thoat")

scanf(chose);

break;

}

}

getch();

}while(chose);

}

}

Bạn đang đọc truyện trên: Truyen2U.Com

Tags: #12345