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

Đề tài: Hướng dẫn viết code thực hiện xóa các file index.dat trong Windows sử dụng VC++

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

    Post Hướng dẫn viết code thực hiện xóa các file index.dat trong Windows sử dụng VC++

    Yêu cầu của bạn là duyệt tìm trong ổ đĩa mọi file index.dat rồi xóa hết đi. Đây là 1 chức năng rất thiết yếu trong hoạt động quản lý hệ thống file, nó dựa vào giải thuật duyệt file đệ qui. Windows cung cấp 2 hàm API tên là FindFirstFile() và FindNextFile() để giúp người lập trình viết giải thuật duyệt đệ qui hệ thống file. Sau đây là mã nguồn hàm duyệt và xóa file viết bằng VC++:


    Code:
    //---------------------------------- 
      
      // Duyệt đệ qui và xóa file theo pattern qui định 
      
      // thí dụ nếu pattern=”c:\index.dat” thì hàm sẽ tìm và xóa  
      
      // hết các file index.dat trên đĩa c: 
      
      //---------------------------------- 
      
      void CXoaDequiDlg::DuyetVaXoa (char *pattern) { 
      
        char drive[4], directory[1024], patname[9], patext[5]; 
      
        char buff[1024], filename[9], file_ext[5]; 
      
        WIN32_FIND_DATA pblock; 
      
        HANDLE hSearch; 
      
        WORD dwRC; 
      
      // tách pattern ra các thành phần cơ bản 
      
         _splitpath(pattern, drive, directory, patname, patext); 
      
      // xây dựng lại pattern cần duyệt 
      
         sprintf(buff,”%s%s*.*”,drive,directory); 
      
      // tìm phần tử đầu thỏa pattern  
      
        hSearch=FindFirstFile(buff,&pblock); 
      
        if (hSearch!=(HANDLE) -1) dwRC=1; else dwRC=0;
    
    
      
        while (dwRC) { // trong khi còn phần tử thỏa pattern 
      
      //không xử lý label, thư mục hiện hành và thư mục cha  
      
        if (strcmp(pblock.cFileName,”.”)==0 || strcmp(pblock.cFileName,”..”) ==0 || (pblock.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)){ 
      
            dwRC=FindNextFile(hSearch,&pblock); continue; 
      
         } 
      
      // tách tên file ra 2 thành phần cơ bản 
      
      _splitpath(pblock.cFileName, buff, buff, filename, file_ext); 
      
      if (pblock.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {  
      
      // nếu thành phần tìm được là thư mục  
      
      // chỉ duyệt và xóa các thành phần con của nó thỏa pattern 
      
      sprintf(buff,”%s%s%s\\%s%s”,drive,directory, pblock.cFileName, patname, patext); 
      
      DuyetVaXoa(buff); 
      
      } else { // nếu là file  
      
      char patternName[256]; 
      
      sprintf(patternName,”%s%s”,patname, patext); 
      
      if (strcmp(patternName,pblock.cFileName)==0) { 
      
      // đúng file cần xóa ==> xóa nó 
      
      // xây dựng pathname tuyệt đối của file cần xóa 
      
      sprintf(buff,”%s%s%s”,drive,directory,pblock.cFileName); 
      
      if (pblock.dwFileAttributes & FILE_ATTRIBUTE_READONLY)  
      
      // xóa thuộc tính readonly 
      
      SetFileAttributes(buff,pblock.dwFileAttributes & (~FILE_ATTRIBUTE_READONLY)); 
      
      // xóa file 
      
      DeleteFile(buff); 
      
      } 
      
      } 
      
      // tìm phần tử kế tiếp 
      
      dwRC=FindNextFile(hSearch,&pblock); 
      
      } 
      
      }


    Theo goctinhoc
    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!

  2. #2
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Code này có bug đấy, các local array khai báo không đủ lớn, với tên file/directory dài, ext dài là app crash cái đùng liền.
    Nên dùng hằng _MAX_PATH, _MAX_FNAME, _MAX_EXT... defined trong windows.h, không được hard code.

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

  1. Lỗi Code xóa file đính kèm trong gửi mail.
    Gửi bởi tanbinh25 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 23-10-2013, 10:15 PM
  2. Viết file bat để xóa virus trong USB drivers như thế nào?
    Gửi bởi anninh1984 trong diễn đàn Lập trình Virus & Anti-Virus
    Trả lời: 10
    Bài viết cuối: 17-01-2011, 05:14 PM
  3. Lập trình C Xóa một file trong Win bằng code như thế nào?
    Gửi bởi quynhle_bk28 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 05-12-2010, 10:27 AM
  4. lỗi code khi viết form Thêm trong windows form
    Gửi bởi maixanh88 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 14-08-2010, 10:50 PM
  5. code xóa một tệp, lỗi không xóa được file nào?
    Gửi bởi rong3sao trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 12-04-2009, 06:41 PM

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