Một trong các phương pháp QIODevice
được thực hiện lại open()
trong QFile
có đối số QFileDevice::FileHandleFlag
. Nhìn vào tài liệu cho nó có hai lựa chọn với các mô tả mâu thuẫn.Qt có tự động đóng các tệp không?
Từ QFileDevice
documentation:
QFileDevice::AutoCloseHandle
- Các tập tin xử lý thông qua vào open() nên được đóng lại bởi close(), hành vi mặc định được rằng gần chỉ xả các tập tin và các ứng dụng chịu trách nhiệm đóng trình xử lý tệp. Khi mở một tệp theo tên, cờ này bị bỏ qua vì Qt luôn sở hữu bộ xử lý tệp và phải đóng nó.
QFileDevice::DontCloseHandle
- Nếu không đóng một cách rõ ràng, xử lý tệp cơ bản sẽ được mở khi đối tượng QFile bị hủy.
Vì vậy, hiện Qt tự động đóng tập tin hay không và không thiết lập tùy chọn này thực sự thay đổi bất cứ điều gì?
DontCloseHandle là khi ứng dụng cung cấp * xử lý * đã mở trước đó và quay lưng con Qt trên đó. Trong trường hợp này, ứng dụng (không phải Qt) có thể muốn giữ lại quyền sở hữu suốt đời. So sánh điều này với "* Khi mở tệp theo tên *, cờ này bị bỏ qua vì * Qt luôn sở hữu xử lý tệp * và phải đóng nó." – user2864740