• Thứ Hai, 17/08/2009 10:00 (GMT+7)

    Viết chương trình C++ thực hiện xóa và phục hồi tập tin

    Câu hỏi :
    Xin hướng dẫn viết chương trình C++ thực hiện xóa và phục hồi tập tin.
     

    Trả lời :
    Có rất nhiều hàm trong nhiều thư viện ở nhiều cấp độ khác nhau cho phép bạn xóa file. Thí dụ bạn có thể gọi hàm remove() trong thư viện nhập/xuất chuẩn của ngôn ngữ C++ có tên là stdio.h để xóa file. Sau đây là mã nguồn của 1 chương trình C++ nhỏ để xóa 1 file:

     //Chương trình xóa file nhờ hàm remove
     #include <stdio.h>
     void main( void ) {
     if (remove("c:\\gvsbk.cod") == -1)
     perror("Không thể xóa file c:\\gvsbk.cod");
     else
     printf("Đã xóa được file c:\\gvsbk.cod\n");
     }
     Hoặc bạn có thể gọi hàm API Windows có tên là DeleteFile() để xóa file. Sau đây là mã nguồn của 1 chương trình C++ nhỏ dùng hàm DeleteFile() để xóa 1 file:
     //Chương trình xóa file nhờ hàm DeleteFile
     #include <stdio.h>
     #include <windows.h>
     void main( void ) {
     if (DeleteFile ("c:\\gvsbk.cod") == 0)
     perror ("Không thể xóa file c:\\gvsbk.cod");
     else
     printf ("Đã xóa được file c:\\gvsbk.cod\n");
     }
     Lưu ý, việc xóa file bằng các hàm remove() và DeleteFile() như trên sẽ xóa vĩnh viễn file tương ứng chứ không đưa file bị xóa vào Recycle Bin để bạn có thể phục hồi khi cần thiết sau này. Thật vậy Recycle Bin chỉ là 1 thư mục đặc biệt để phục vụ cho các hoạt động xử lý file dạng "Shell" chứ không liên quan đến hệ điều hành. Thí dụ tiện ích Windows Explorer là tiện ích dạng "Shell" cho phép bạn xử lý file rất an toàn thông qua Recycle Bin. Riêng về mặt lập trình, bạn có thể gọi hàm SHFileOperation() để xóa file an toàn, file bị xóa có thể được đặt vào Recycle Bin để có thể được phục hồi khi cần thiết. Sau đây là mã nguồn của 1 chương trình C++ nhỏ dùng hàm SHFileOperation() để xóa 1 file và cất nó vào Recycle Bin:

     //Chương trình xóa file nhờ hàm SHFileOperation
     #include <windows.h>
     #include <Shellapi.h>
     #include <stdio.h>
     void main( void ) {
     SHFILEOPSTRUCT shf;
     //thiết lập các thông số cho tác vụ xóa file
     shf.wFunc = FO_DELETE;
     shf.pFrom = "c:\\gvsbk.cod";
     shf.pTo = 0; // Not used
     shf.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION;
     if (SHFileOperation (&shf) != 0)
     perror ("Không thể xóa file c:\\gvsbk.cod");
     else
     printf ("Đã xóa được file c:\\gvsbk.cod\n");
     }
     Việc kiểm tra xem Recycle Bin còn chứa các file nào và quyết định phục hồi file nào trong nó thường do người dùng làm thủ công chứ ít khi được lập trình tự động vì không có nghĩa lắm.
     
    Chuyên mục: Lập trình