Viết chương trìnhhiểnthị cây thưmụcbằngTurboC2.0 Chuyên mục: Lập trình Câu hỏi : Xin hướng dẫn viết chương trìnhhiểnthị cây thưmục (giống như lệnh dir của Dos) bằngTurboC 2.0. Trả lời : Bạn có thể gọi 2 hàm thư viện findfirst() và findnext() lặp lại nhiều lần để duyệt đọc các phần tử trong 1 thưmục và các thưmục con của nó rồi hiểnthị chúng theo dạng cây như ý muốn. Sau đây là code C (theo cú pháp của Borland C++) của phần mềm hiểnthịcâythưmục do tôi viết cách đây nhiều năm về trước: /*---------------------------------------------------*/ /* Chươngtrình duyệt và hiểnthịcâythưmục */ /* Người viết : NGUYEN VAN HIEP, DHBK Tp.HCM */ /* Ngày viết : 10 - 09 - 1992 */ /* Ngôn ngữ : Borland C++ */ /*---------------------------------------------------*/ //khai báo các thư viện cần dùng #include <dos.h> #include <io.h> #include <dir.h> #include <ctype.h> #include <stdio.h> #include <process.h> #include <string.h> //định nghĩa các hằng ký tự đồ họa cần dùng #define VCHAR 179 #define HCHAR 196 #define VHCHAR 195 //khai báo trước hàm duyệt câythưmục void duyetcay (int level, char *patern); //chương trình chính void main(int argc, char* argv[]) { int i; if (argc != 2) { printf("Hãy nhập lệnh : disptree <dir> <Enter>\n"); exit(1); } duyetcay(1, argv[1]); } //hàm hiểnthịthưmục ở cấp level void dispdir(int level, char* fname) { int i; char buff[1000], filename[256], file_ext[128]; if (level > 1) { printf(" "); for (i=1; i<=level-2;i++) printf("%c ",VCHAR); fnsplit(fname, buff, buff, filename, file_ext); printf("+%c",HCHAR); printf("%s%s\n",filename,file_ext); } else { printf("+%c",HCHAR); printf("%s\n",fname); } } //hàm hiểnthị file ở cấp level void dispfile(int level, char* fname) { int i; for (i=1; i<=level-2;i++) printf(" ³"); printf(" %c%c",VHCHAR, HCHAR); printf("%s\n",fname); } // hàm duyệt và hiểnthịcâythưmục void duyetcay (int level, char *dir) { char buff[256]; struct ffblk pblock; int result; //hiển thị tên thưmục dispdir(level,dir); level = level+1; //xây dựng pattern cần duyệt sprintf(buff,"%s\\*.*",dir); //tìm phần tử đầu tiên thỏa pattern result = findfirst(buff,&pblock, 0xFF); while (!result) { //còn phần tử //không xử lý phần tử miêu tả label đĩa if (pblock.ff_attrib & FA_LABEL) { result = findnext(&pblock); continue; } //không xử lý thưmụchiện hành if (strcmp(pblock.ff_name,".")==0) { result = findnext(&pblock); continue; } //không xử lý thưmục cha if (strcmp(pblock.ff_name," ")==0) { result = findnext(&pblock); continue; } if (pblock.ff_attrib & FA_DIREC) { //thư mục sprintf(buff,"%s\\%s",dir,pblock.ff_name); duyetcay(level, buff); } else //nếu là file ==> hiểnthị tên file dispfile(level,pblock.ff_name); //tìm phần tử kế tiếp trong thưmục result = findnext(&pblock); } } Lưu ý rằng việc hiểnthịcâythưmục lớn lên màn hình Dos có kích thước 25 hàng*80 cột có nhiều bất tiện, bạn chỉ có thể thấy phần cuối của câythưmục nếu thưmục cần khảo sát quá lớn. . Viết chương trình hiển thị c y thư m c bằng Turbo C 2. 0 Chuyên m c: Lập trình C u hỏi : Xin hướng dẫn viết chương trình hiển thị c y thư m c (giống. và c c thư m c con c a nó rồi hiển thị chúng theo dạng c y như ý muốn. Sau đây là code C (theo c pháp c a Borland C+ +) c a phần mềm hiển thị c y thư mục