1. Trang chủ
  2. » Thể loại khác

Viết chương trình hiển thị cây thư mục bằng Turbo C 2

3 684 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Viết chương trình hiển thị cây thư mục bằng Turbo C 2
Tác giả Nguyen Van Hiep
Trường học Ho Chi Minh City University of Technology
Chuyên ngành Lập trình C
Thể loại Bài viết hướng dẫn
Năm xuất bản 1992
Thành phố Ho Chi Minh City
Định dạng
Số trang 3
Dung lượng 14,53 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 như lệnh dir của Dos bằng Turbo C 2.

Trang 1

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 như lệnh dir của Dos) bằng Turbo C 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ể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 do tôi viết cách đây nhiều năm về trước:

/* -*/

/* Chương trình duyệt và hiển thị cây thư 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ây thư mục

void duyetcay (int level, char *patern);

//chương trình chính

void main(int argc, char* argv[]) {

Trang 2

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ển thị 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ển thị 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ển thị cây thư 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);

Trang 3

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ục hiệ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ển thị 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ển thị cây thư 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ây thư mục nếu thư mục cần khảo sát quá lớn

Ngày đăng: 06/11/2013, 01:15

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w