-
18-11-2010, 11:00 AM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Kiểm tra một file đã được mở bởi chương trình khác hay ko?
Hôm nay Kevin làm một cái chương trình, trong đó liên quan đến phần duyệt các files trong một thư mục chỉ định, sau đó kiểm tra từng file có được mở bởi một ứng dụng khác hay ko. Vấn đề xảy ra là.
1. Kevin sử dụng API CreateFile để check với Exclusive access thì nó có khả năng kiểm tra điều này, nhưng mà nó lại giữ handle của file không nhả (Chỉ nhà khi mình thoát khỏi chương trình), mặc dù đã gọi CloseHandle. Không lẽ lại đi duyệt các handle thì hơi bị mệt công. Không biết có anh em nào biết cách nào khác hiệu quả không?
Đây là hàm, mà Kevin viết.
Mã:BOOL IsFileAlreadyOpen(TCHAR* szFileName){ HANDLE hFile = CreateFile( szFileName, GENERIC_WRITE, NULL, //Exclusive access NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); BOOL bResult = (hFile == INVALID_HANDLE_VALUE) ? TRUE : FALSE; CloseHandle(hFile); return bResult;}
View more random threads:
- Nhận biết chương trình dạng console vừa được mở lên
- Tính số Icon Trong 1 File exe ?
- Tạo control và window như thế nào ?
- Kick chuột trái vào 1 cửa sổ game như thế nào???
- Cách truyền hàm xử lí sự kiện cho Find dialogbox
- WriteFile Kiểu dữ liệu là con trỏ
- help unhook ZwOpenProcess
- MIME không dùng STARTTLS Gửi File Unicode ?
- SendInput Với tham số INPUT_MOUSE
- Sử dụng WMI để ghi giá trị vào object của NetworkApdaper không được. Nguyên nhân ?
-
18-11-2010, 06:37 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
portable:
Mã:#include <iostream> int main() { if( 0 != rename( "a.txt", "a.txt" ) ) { std::cout << "File is currently opened. "; }}
-
18-11-2010, 06:41 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
ý tưởng của rox_rock hay đấy[IMG]images/smilies/wink.png[/IMG]
thank[IMG]images/smilies/clap_grin.gif[/IMG]
-
20-11-2010, 04:58 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Ah, Kevin đã phát hiện ra nguyên nhân ko phải do vấn đề này. Lỗi là do phần Kevin hook vào hàm duyệt file, mục đích là chỉ có chương trình của mình làm việc với nó mà thôi, nhưng nó lại bị giữ handle trên windows XP. Kevin đã đổi phương pháp hook, kết quả đã chạy OK.
Hàm IsFileAlreadyOpen Kevin viết chạy ổn đó, bạn nào sử dụng thì bỏ CloseHandle với INVALID_HANDLE_VALUE để tránh lỗi tiềm tàng sau này.
Không chỉ dừng lại ở việc sử dụng nguyên liệu cao cấp, mỗi công trình còn được "chăm sóc" bằng 4 dịch vụ xuất sắc của Tre Nghệ. Từ việc tư vấn, thiết kế đến thi công và hoàn thiện, mọi quy trình đều...
Chất Lượng và Sáng Tạo: Kiến Trúc...