Video: Khắc phục lỗi không mở được file pdf, file excel, không mở được ứng dụng trong Windows 2025
Khi bạn mở một tập tin, mọi thứ có thể sai. Một tệp tin tồn tại trên thiết bị vật lý - ví dụ như đĩa cố định, hoặc có thể trên ổ đĩa flash hoặc thẻ nhớ SD - và bạn có thể gặp sự cố khi làm việc với thiết bị vật lý.
Ví dụ, một phần của đĩa có thể bị hỏng, gây ra tệp hiện có bị hỏng. Hoặc, ít tai hoạ, bạn có thể hết dung lượng đĩa. Hoặc, thậm chí thảm khốc hơn, bạn có thể thử mở một tập tin trong một thư mục không tồn tại.
Nếu bạn cố gắng mở một tệp tin để viết bằng cách xác định đường dẫn đầy đủ và tên tệp nhưng thư mục đó không tồn tại, máy tính sẽ phản ứng khác, tùy thuộc vào hệ điều hành mà bạn đang sử dụng. Nếu bạn không chắc chắn về cách hệ điều hành cụ thể của bạn sẽ đáp ứng, hãy thử viết một ứng dụng thử nghiệm đơn giản để tạo và mở một cái gì đó như / abc / def / ghi / jkl / abc. txt. (Tất nhiên, bạn sẽ muốn chắc chắn sử dụng một thư mục không tồn tại.)
Sau đó, một trong hai điều sẽ xảy ra: Hoặc thư mục và tập tin sẽ được tạo ra, hoặc không có gì sẽ xảy ra.
Ví dụ, trên một hệ thống Windows, nếu chúng ta cố gắng tạo một tập tin trong một thư mục không tồn tại, hệ thống sẽ không tạo thư mục. Đó là bởi vì sâu bên trong, ứng dụng cuối cùng gọi một chức năng hệ điều hành mà làm việc bẩn của việc tạo tập tin. Và chức năng hệ điều hành đặc biệt này (được gọi là CreateFile (), nếu bạn quan tâm) có một quy tắc rằng nó sẽ không tạo một thư mục cho bạn.
Nếu bạn muốn xác định xem lớp ostream có thể tạo tệp tin không, bạn có thể gọi hàm fail () của nó. Hàm này trả về true nếu đối tượng không thể tạo tệp. Và đó là những gì xảy ra khi một thư mục không tồn tại. Ví dụ DirectoryCheck01 thể hiện một ví dụ về điều này.
#include #include bằng cách sử dụng không gian tên tiêu chuẩn; int main () {ofstream outfile ("/ abc / def / ghi / MyFile. txt"); nếu (outfile. thất bại ()) {cout << "không thể mở tập tin!" << endl; return 0;} outfile << "hi" << endl; outfile. gần(); return 0;}
Khi bạn chạy mã này, giả sử bạn không có thư mục có tên / abc / def / ghi trên hệ thống, bạn sẽ thấy thông báo Không thể mở tệp! Giả sử hệ điều hành cụ thể của bạn không tạo thư mục trong trường hợp này; nếu có, máy tính của bạn sẽ mở tập tin, viết Hi to it, và tiếp tục cuộc sống hạnh phúc của nó sau khi kết thúc mọi thứ.
Là một sự thay thế cho việc gọi hàm fail (), bạn có thể sử dụng toán tử có sẵn trong các lớp dòng khác nhau. Đây là!, thường được gọi là toán tử "bang", và bạn sẽ sử dụng nó thay vì gọi thất bại (), như trong đoạn mã này:
if (!outfile) {cout << "không thể mở tập tin!" << endl; return 0;}
Hầu hết mọi người thích sử dụng! outfile thay vì outfile. thất bại (), mặc dù! outfile làm cho mã khó hiểu. Lý do là Outfile là một đối tượng, và khái niệm! outfile đơn giản là không có ý nghĩa.
Trong thực tế,! outfile chuyến đi lên nhiều lập trình ban đầu. Họ biết rằng outfile không phải là một con trỏ trong mã mẫu này, và họ tự hỏi làm thế nào bạn có thể kiểm tra nó với 0 như bình thường bạn chỉ có thể làm với một con trỏ. (Hãy nhớ, bằng cách nói! X, trong đó x là một con trỏ, bạn đang thử nghiệm x với 0.) Và điều đó đơn giản là không có ý nghĩa! Và để tránh lẫn lộn, chỉ cần gọi fail (). Nó có ý nghĩa hơn.
Dưới đây là một số lý do khiến việc tạo tệp của bạn bị nghẹt thở:
-
Thư mục không tồn tại.
-
Bạn đã hết dung lượng đĩa và không may.
-
Ứng dụng của bạn không có quyền hợp lệ để tạo tệp.
-
Tên tệp không hợp lệ - nghĩa là chứa các ký tự mà hệ điều hành không cho phép trong tên tệp, chẳng hạn như * hoặc?.
Giống như bất kỳ ứng dụng hay, ứng dụng của bạn nên làm hai việc sau:
-
1. Kiểm tra xem liệu một tệp tin đã thành công hay không.
-
2. Nếu việc tạo tệp không thành công, hãy xử lý nó một cách thích hợp.
Không chỉ in một thông điệp khủng khiếp như Rất tiếc! Hủy bỏ!, để lại cho người nghèo của bạn không có sự lựa chọn, nhưng để quăng màn hình lên sàn nhà. Thay vào đó, hãy làm một cái gì đó thân thiện hơn - như đưa ra thông báo cho họ biết có vấn đề và gợi ý rằng họ có thể giải phóng thêm không gian đĩa.