Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Nhờ các pro giúp đỡ gấp về Tạo thư mục bằng Borland C

  1. #1
    Ngày gia nhập
    05 2008
    Bài viết
    1

    Mặc định Nhờ các pro giúp đỡ gấp về Tạo thư mục bằng Borland C

    Chào cả nhà.
    Em đang làm bài tập về: Tạo thư mục bằng ngôn ngữ BorlandC mà không biết làm như thế nào.
    - Đây là môn thầy bắt phải tự tìm hiểu ngôn ngữ và viết chương trình,

    Dưới đây là code bài đó.Em chạy nó báo lỗi tùm lum mà không biết phải sửa sao cho nó chạy.
    Sẽ bao một chầu cafe Sài Thành cho ai giúp em .
    Nhờ anh em giúp đỡ em với.Cám ơn anh em nhiều.
    C Code:
    1. #include <conio.h>
    2. #include <stdio.h>
    3. #include <ctype.h>
    4. #include <dir.h>
    5. #include <stdlib.h>
    6. #include <alloc.h>
    7. #include <dos.h>
    8. #include <time.h>
    9.  
    10. typedef unsigned char BYTE;
    11. typedef unsigned int  WORD;
    12. typedef unsigned long DWORD;
    13.  
    14. typedef struct
    15. {
    16.     unsigned hund:7;
    17.     unsigned sec:6;
    18.     unsigned min:6;
    19.     unsigned hour:5;
    20. } Time3Byte;
    21.  
    22. typedef struct tagENTRY
    23. {
    24.     BYTE FileName[8];
    25.     BYTE FileExt[3];
    26.     BYTE Attrib;
    27.     BYTE Reserved;
    28.     Time3Byte TimeCreate;
    29.     WORD DateCreate;
    30.     WORD LastAccess;
    31.     WORD HightCluster;
    32.     WORD Time;
    33.     WORD Day;
    34.     WORD FirstCluster;
    35.     DWORD FileSize;
    36. } ENTRY;
    37.  
    38. typedef struct tagBootSector
    39. {
    40.     BYTE CmdJmp[3];
    41.     BYTE Ver[8];
    42.     WORD SectorSize;
    43.     BYTE SectorPerCluster;
    44.     WORD ReservedSector;
    45.     BYTE FatCount;
    46.     WORD RootSize;
    47.     WORD TotalSector;
    48.     BYTE Media;
    49.     WORD SectorPerFat;
    50.     WORD SectorPerTrack;
    51.     WORD HeadCount;
    52.     WORD HiddenSector;
    53.     BYTE Code[482];
    54. } BootSector;
    55.  
    56. void ReadBootSector();
    57. void ReadRDET();
    58. int ReadSectors(int, int, void*);
    59. int WriteSectors(int, int, void*);
    60. void SetFatValue(int, int, unsigned char *);
    61. void WriteFAT(BYTE *Fat);
    62. void WriteRDET();
    63. int MakeDir(char *path);
    64.  
    65. WORD IsExistPath(char *path);
    66. void MakeEntryRoot(WORD FirstCluster,WORD ParrentCluster,char*buffer);
    67.  
    68. void MyStrCpy(char *,char*,int);
    69. void UpperString(char *s);
    70.  
    71. ENTRY *RDET;           // RDET pointer
    72. BYTE  *FAT;            // FAT pointer
    73. int numEntry;          // Total entry of RDET
    74. BootSector bootsector; // Boot sector
    75.  
    76. int main()
    77. {
    78.     clrscr();
    79.     char command[256]={0};
    80.     ReadBootSector();
    81.     ReadRDET();
    82.     printf("Nhap vao duong dan thu muc can tao: ");
    83.     fflush(stdin);
    84.     gets(command);
    85.  
    86.     MakeDir(command);
    87.  
    88.     getch();
    89.     return 0;
    90. }
    91.  
    92. void ReadBootSector()
    93. {
    94.     if(!ReadSectors(0,1,(void*)&bootsector))
    95.     {
    96.         printf("\nRead Boot Sector error");
    97.         getch();
    98.         exit(1);
    99.     }
    100. }
    101.  
    102. void ReadRDET()
    103. {
    104.     unsigned char RootSector;
    105.     // Total sector of RDET
    106.     RootSector=bootsector.RootSize/16;
    107.     // Total entry of RDET
    108.     numEntry=(RootSector*512)/sizeof(ENTRY);
    109.     // Alloc memory for RDET
    110.     RDET=(ENTRY*)malloc(numEntry*sizeof(ENTRY));
    111.     // Read RDET
    112.     if(!ReadSectors(19,RootSector,RDET))
    113.     {
    114.         printf("\nRead RDET error!");
    115.         getch();
    116.         exit(1);
    117.     }
    118. }
    119.  
    120. //This function will create 2 entry: "." and ".." for SDET
    121. void MakeEntryRoot(WORD FirstCluster,WORD ParrentCluster,ENTRY *SDET)
    122. {
    123.     // entry .
    124.     SDET[0].FileName[0]=0x2E;
    125.     for(int i=1; i<8;i++) SDET[0].FileName[i]=0x20;
    126.     for(i=0; i<3;i++) SDET[0].FileExt[i]=0x20;
    127.     SDET[0].FirstCluster=FirstCluster;
    128.     SDET[0].TimeCreate=SetTime2(); // 3 byte
    129.     // SDET[0].Time= SetTime();       //2 byte
    130.     SDET[0].Day=SDET[0].DateCreate=SetDate();
    131.     // entry ..
    132.     SDET[1].FileName[0]=0x2E;
    133.     SDET[1].FileName[1]=0x2E;
    134.     for(i=2; i<11;i++) SDET[1].FileName[i]=0x20;
    135.     for(i=0; i<3;i++) SDET[1].FileExt[i]=0x20;
    136.     //If ParrentCluster = 0 : this folder is created in RDET
    137.     SDET[1].FirstCluster=ParrentCluster;
    138. }
    139.  
    140. // This function will find the file in RDET or SDET
    141. // If have, return 1
    142. // else return 0;
    143. // In: cluster contain SDET, or cluster =1 if RDET
    144. int IsExistFile(WORD cluster, char *Name, char *Ext)
    145. {
    146.     char *str;
    147.     if(cluster==1)
    148.     {
    149.         for(int entry=0; entry<224; entry++)
    150.             if(strncmp(RDET[entry].FileName,Name,strlen(Name))==0
    151.                 && (strncmp(RDET[entry].FileExt,Ext,3)==0))
    152.                 return RDET[entry].FirstCluster; // Already exist file
    153.         if(entry==224) return 0;  // No file in RDET
    154.     }
    155.     else
    156.     {
    157.         ENTRY SDET[16];
    158.         //Read SDET
    159.         ReadSectors(cluster+31,1,(void*)&SDET);
    160.         for(int entry=2; entry<16; entry++)
    161.             if(strncmp(SDET[entry].FileName,Name,strlen(Name))==0
    162.                 && (strncmp(SDET[entry].FileExt,Ext,3)==0))
    163.                 return SDET[entry].FirstCluster; // Already exist file
    164.         if(entry==16) return 0;   //No file in SDET
    165.     }
    166.     return cluster;
    167. }
    168.  
    169. int MakeDir(char *path)
    170. {
    171.     int clusFree;
    172.     ENTRY childSDET[16];
    173.     memset(childSDET,0,512);
    174.     if((clusFree=FindClusterFree(2))==-1)
    175.     {
    176.         printf("Haven't enough free space");
    177.         return -1;
    178.     }
    179.  
    180.     WORD cluster;
    181.     UpperString(path);
    182.     cluster=IsExistPath(path);
    183.     if(FindClusterFree(2)==-1)
    184.     {
    185.         printf("Haven't enough free space");
    186.         return -1;
    187.     }
    188.  
    189.     //char buffer[512]={0};
    190.     if(cluster)
    191.     {
    192.         printf("The path is already exist !");
    193.         return -1;
    194.     }
    195.  
    196.     else if (Direct.level==0)   // ROOT DIR
    197.         for(int i=0; i<numEntry; i++)
    198.         {
    199.             if(RDET[i].FileName[0]==0)
    200.             {
    201.                 UpperString(path);
    202.                 MyStrCpy(RDET[i].FileName,path,11);  //8 file name, 3 ext
    203.                 RDET[i].Attrib=0x10;  //dir
    204.                 RDET[i].FirstCluster=clusFree;
    205.                 RDET[i].TimeCreate=SetTime2();
    206.                 RDET[i].Time=SetTime();
    207.                 RDET[i].DateCreate=RDET[i].Day=SetDate();
    208.                 SetFatValue(RDET[i].FirstCluster,0xFFF,FAT);
    209.                 MakeEntryRoot(RDET[i].FirstCluster,Direct.cluster,childSDET);
    210.  
    211.                 WriteSectors(RDET[i].FirstCluster+31,1,(void*)childSDET);  // Ghi vao first cluster
    212.                 WriteFAT(FAT);
    213.                 WriteRDET();
    214.  
    215.                 return 0;
    216.             }
    217.         }
    218.     else
    219.     {
    220.         ENTRY SDET[16]={0};
    221.         //Read SDET of cluster direct
    222.         ReadSectors(Direct.cluster+31,1,(void*)&SDET);
    223.         // mkEntryRoot(clusFree,Direct.cluster,(char*)SDET);
    224.         for(int i=2; i<16; i++)
    225.             //Update for parrent dir
    226.             if(SDET[i].FileName[0]==0)
    227.             {
    228.                 MyStrCpy(SDET[i].FileName,path,11);
    229.                 SDET[i].Attrib=0x10;  //dir
    230.                 SDET[i].FirstCluster=clusFree; // address of parrent dir
    231.                 SDET[i].TimeCreate=SetTime2(); // time 3 byte
    232.                 SDET[i].Time=SetTime();
    233.                 SDET[i].DateCreate=SDET[2].Day=SetDate();
    234.                 SetFatValue(SDET[2].FirstCluster,0xFFF,FAT);
    235.                 if(!WriteSectors(Direct.cluster+31,1,(void*)&SDET))
    236.                     printf("Write parrent SDET error");
    237.  
    238.                 // Create child dir
    239.                 MakeEntryRoot(clusFree,Direct.cluster,childSDET);
    240.                 SetFatValue(clusFree,0xFFF,FAT);
    241.                 WriteFAT(FAT);
    242.                 if(!WriteSectors(clusFree+31,1,(void*)childSDET))
    243.                     printf("Write child SDET error");
    244.  
    245.                 return 0;
    246.             }
    247.     }
    248.     return -1; //error
    249. }
    250.  
    251.  
    252. void UpperString(char *s)
    253. {
    254.     int i;
    255.     for (i = 0; i < strlen(s); i++)
    256.         s[i] = toupper(s[i]);
    257.     s[i+1]=0;
    258. }
    259.  
    260. void MyStrCpy(char *s1,char *s2,int maxlen)
    261. {
    262.     int i;
    263.     for (i = 0;i<strlen(s2);i++)
    264.     {
    265.         if(s2[i]==32 || s2[i]==0) s1[i]=32;
    266.         else s1[i] = s2[i];
    267.     }
    268.     if(i<maxlen)
    269.         for(i=strlen(s2); i<maxlen; i++)
    270.             s1[i]=32;
    271. }
    272.  
    273. //Ham nay tim xem tren dia A co thu muc la path hay khong
    274. //neu co tra ve cluster dau tien (2..n)
    275. //neu khong tra ve 0
    276. //neu rong tra ve 1 = root dir
    277. WORD IsExistPath(char *path)
    278. {
    279.     char temp[256],temp1[256];
    280.     int i;
    281.     WORD clus;
    282.     clus = 1;
    283.     Direct.level=0;        // Mac dinh se~ la` o? Root
    284.     if (strlen(path) == 0) return clus;
    285.     else
    286.     {
    287.         strcpy(temp,path);
    288.         while (strlen(temp))
    289.         {
    290.             for (i = 0; i < strlen(temp); i++)
    291.                 // Find sub dir
    292.                 if (temp[i] == '/' || temp[i] =='\\')
    293.                 {
    294.                     Direct.level++;
    295.                     break;
    296.                 }
    297.                 if (i == strlen(temp))
    298.                 {
    299.                     path[0]=0;
    300.                     strcpy(path,temp);
    301.                     return FindSubDir(clus,temp);
    302.                 }
    303.                 else
    304.                 {
    305.                     strcpy(temp1,temp);
    306.                     temp1[i] = 0;
    307.                     clus = FindSubDir(clus,temp1);
    308.                     if (clus == 0) return clus;
    309.                     else
    310.                     {
    311.                         Direct.cluster=clus;
    312.                         strcpy(temp,temp+i+1);
    313.                     }
    314.                 }
    315.         }
    316.         return clus;
    317.     }
    318. }
    319.  
    320. void WriteRDET()
    321. {
    322.     unsigned char RootSector;
    323.     RootSector=bootsector.RootSize/16;
    324.     if(!WriteSectors(19,RootSector,RDET))
    325.     {
    326.         printf("Write RDET error!");
    327.         getch();
    328.         exit(1);
    329.     }
    330. }
    331.  
    332. void WriteFAT(BYTE *Fat)
    333. {
    334.     if (!WriteSectors(1,9,(void *)Fat))
    335.     {
    336.         printf("Write FAT1 error!");
    337.         exit(1);
    338.     }
    339.     if (!WriteSectors(10,9,(void *)Fat))
    340.     {
    341.         printf("Write FAT2 error!");
    342.         exit(1);
    343.     }
    344. }
    345.  
    346. int ReadSectors(int sector, int num, void*buffer)
    347. {
    348.     union REGS inRegs, outRegs;
    349.     struct SREGS sRegs;
    350.     inRegs.h.al=0; //Drive A
    351.     inRegs.x.cx=num;
    352.     inRegs.x.dx=sector;
    353.     sRegs.ds=FP_SEG(buffer);
    354.     inRegs.x.bx=FP_OFF(buffer);
    355.     int86x(0x25,&inRegs,&outRegs,&sRegs);
    356.     if(outRegs.x.cflag) return 0;
    357.     return num;
    358. }
    359.  
    360. int WriteSectors(int sector, int num, void *buffer)
    361. {
    362.     union REGS inRegs, outRegs;
    363.     struct SREGS sRegs;
    364.     inRegs.h.al=0; //Drive A
    365.     inRegs.x.cx=num;
    366.     inRegs.x.dx=sector;
    367.     sRegs.ds=FP_SEG(buffer);
    368.     inRegs.x.bx=FP_OFF(buffer);
    369.     int86x(0x26,&inRegs,&outRegs,&sRegs);
    370.     if(outRegs.x.cflag) return 0;
    371.     return num;
    372. }
    373.  
    374. void SetFatValue(int k, int value, unsigned char *Fat)
    375. {
    376.     int i=(k*3)/2;
    377.     unsigned char nLo, nHi;
    378.     if((k%2)==0)
    379.     {
    380.         nHi=(value & 0xF00) >>8;
    381.         nLo=(value & 0xFF);
    382.         Fat[i]=nLo;
    383.         Fat[i+1]=(Fat[i+1] & 0xF0) | nHi;
    384.     }
    385.     else
    386.     {
    387.         nHi=(value& 0xFF0) >>4;
    388.         nLo=(value &0xF) <<4;
    389.         Fat[i]=(Fat[i] & 0xF)|nLo;
    390.         Fat[i+1]=nHi;
    391.     }
    392. }
    Nó báo lỗi như này nè:

  2. #2
    Ngày gia nhập
    05 2008
    Nơi ở
    hồ chí minh
    Bài viết
    4

    ghê wa ko hiểu gi hết dù em học C ko phiải tệ
    I LOVE YOU OKE!

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    một nơi xa xăm...
    Bài viết
    127

    Không coi code nhưng xem error thì mình nghĩ : BC của bạn hoặc là thiếu các lib trên ( stdio.h,conio.h...) hoặc là bị lỗi.Vì nó không thể tìm được các file conio.h,stdio.h... nên đương nhiên nó không thể hiểu được các hàm bạn sử dụng trong chương trình.Bạn có thể cài lại BC xem.Hoặc có thể có sự lựa chọn nào khác mà mình không biết vì mình không sài BC,bạn có thể hỏi những người đã sài cái này. ^^

  4. #4
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Bạn thiết lập phần Directories không chính xác, hãy chỉnh lại cho nó trỏ đúng vào thư mục Include và Lid. Nó ở Tool menu đó.
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  5. #5
    Ngày gia nhập
    05 2008
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi Dreaminess Xem bài viết
    Bạn thiết lập phần Directories không chính xác, hãy chỉnh lại cho nó trỏ đúng vào thư mục Include và Lid. Nó ở Tool menu đó.

    Bác hướng dẫn em một cách cụ thể, chi tiết đi...Em mầy mò mãi mà vẫn không được... híc híc...
    Thanks anh nhiều.

  6. #6
    Ngày gia nhập
    03 2008
    Bài viết
    8

    Mặc định Nhờ các pro giúp đỡ gấp về Tạo thư mục bằng Borland C

    loi~ nay` thi` ban viet helloworld cu~ng khong duoc chu chua noi j.....Cai` lai ban complie moi di ban
    ....!!!!!!

  7. #7
    Ngày gia nhập
    05 2008
    Bài viết
    1

    Em đã cài lại BorlandC 3++ của bác Dreaminess.
    Bây giờ chạy thì nó hết báo lỗi "sai thư viện".
    Và chỉ còn:


    Em gà quá nhỉ?

Các đề tài tương tự

  1. Phần mềm lập trình C Giúp mình cài borland c trong win 7 64 bit voi ???
    Gửi bởi lakken trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 2
    Bài viết cuối: 03-01-2012, 04:24 PM
  2. Công cụ lập trình C Lỗi borland C++ 5.02, giúp mình khắc phục
    Gửi bởi neo.one trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 2
    Bài viết cuối: 25-10-2010, 09:50 AM
  3. cài đặt borland C 3.1 cho win7. Giúp mình với
    Gửi bởi kingdevil trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 29-07-2010, 08:37 AM
  4. Phần mềm lập trình C lỗi ntvdm trong borland C ! giúp mình với
    Gửi bởi phuocdat360 trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 0
    Bài viết cuối: 05-05-2010, 01:31 PM
  5. Kiến thức và bài tập cơ bản về Borland C++, mong các bạn giúp?
    Gửi bởi muonhochoi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 06-05-2009, 10:47 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn