-
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:
- Làm sao để hook khi đã có hWnd?
- Dùng hàm api nào để tìm kiếm file trên window
- hàm ReadDirectoryChangesW có tác dụng gì?
- Vector
, _beginthreadex Lỗi Unhandled exception khó hiểu ? - Phương pháp Hook API sử dụng SetWindowsHook
- TC đếm số cluster còn trống trên đĩa
- Mouse Scroll Control VC++ Windows ?
- Certificate của chương trình Exe
- Làm thế nào để monitor windows process?
- Hàm tìm kiếm tất cả các file loại trừ một số thư mục?
-
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.
Pallet nhựa Lâm Đồng giải pháp hoàn hảo cho nhà kho Pallet nhựa Lâm Đồng là một giải pháp đa năng và hiệu quả trong việc vận chuyển và lưu trữ hàng hóa. Trong đó, pallet nhựa Lâm Đồng không chỉ đáp...
Pallet nhựa Lâm Đồng giải pháp...