Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: cần hỏi về lits file

  1. #1
    Ngày gia nhập
    04 2015
    Nơi ở
    Hà Nội, Vietnam
    Bài viết
    30

    Mặc định cần hỏi về lits file

    chào mn. mình đang code 1 chương trình đơn giản:
    liệt kê các file có trong 1 thư mục:
    đoạn code mình đây:
    Code:
    #include <Windows.h>
    
    #define IDC_MAIN_EDIT 101
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    void AddMenus(HWND);
    #define IDM_FILE_open 1
    #define IDM_FILE_exit 2
    
    void DoFileOpen(HWND hwnd)
    {
    	OPENFILENAME ofn;
    	char szFileName[MAX_PATH] = "";
    
    	ZeroMemory(&ofn, sizeof(ofn));
    
    	ofn.lStructSize = sizeof(OPENFILENAME);
    	ofn.hwndOwner = hwnd;
    	ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0";
    	ofn.lpstrFile = szFileName;
    	ofn.nMaxFile = MAX_PATH;
    	ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
    	ofn.lpstrDefExt = "txt";
    
    	if (GetOpenFileName(&ofn))
    	{
    		HWND hEdit = GetDlgItem(hwnd, IDC_MAIN_EDIT);
    	}
    }
    
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    	WNDCLASS wc = { 0 };
    	HWND hwnd;
    	MSG msg;
    
    	
    	wc.lpszClassName = TEXT("Window");
    	wc.hInstance = hInstance;
    	wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
    	wc.lpfnWndProc = WndProc;
    	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    	
    	RegisterClass(&wc);
    
    	hwnd = CreateWindow(wc.lpszClassName, TEXT("HUY"),
    		WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    		100, 100, 250, 150,
    		NULL, NULL, hInstance, NULL);
    	
    
    	while (GetMessage(&msg,NULL,0,0))
    	{
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    	}
    	return (int)msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    	switch (msg)
    	{
    	case WM_CREATE:
    	{
    					  AddMenus(hwnd);
    					  break;
    	}
    	case WM_COMMAND:
    	{
    					   switch (LOWORD(wParam))
    					   {
    					   case IDM_FILE_open:
    						   DoFileOpen(hwnd);
    						   break;
    						   
    					   case IDM_FILE_exit:
    						   PostQuitMessage(0);
    						   break;
    					   }
    	}
    	case WM_DESTROY:
    	{
    					   PostQuitMessage(0);
    					   break;
    	}
    	}
    	return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    
    void AddMenus(HWND hwnd)
    {
    	HMENU hMenubar;
    	HMENU hMenu;
    
    	hMenubar = CreateMenu();
    	hMenu = CreateMenu();
    
    	AppendMenu(hMenu, MF_STRING, IDM_FILE_open, TEXT("open"));
    	AppendMenu(hMenu, MF_STRING, IDM_FILE_exit, TEXT("exit"));
    
    	AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);
    	AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hMenu, TEXT("file"));
    	SetMenu(hwnd, hMenubar);
    }
    Liệu còn cách nào để tạo danh sách listfile kiểu như trên không? (cụ thể là áp dụng fopen() và fread() trong C)
    nếu có ví dụ cụ thể thì tốt quá
    thanks
    Đã được chỉnh sửa lần cuối bởi huytohl : 21-08-2015 lúc 03:28 PM.

  2. #2
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    732

    Đọc mà mình không rõ mục đích của bạn, đưa ra vài cách mà có thể bạn cần.

    Nếu là liệt kê các file có trong 1 thư mục thì bạn tham khảo mã sau :
    Visual C++ Code:
    1. #include<shlwapi.h>                     // Window Shell
    2. #pragma comment(lib,"shlwapi.lib")      // Phân giải cho Shell
    3. // szFolder : Chuỗi đường dẫn thư mục
    4. // hList : Thẻ cửa sổ listbox để hiển thị các tập tin
    5. void EnumFile(PCHAR szFolder, HWND hList)
    6. {
    7.     WIN32_FIND_DATA     wfd;
    8.     CHAR                szFind[MAX_PATH * 2];
    9.     HANDLE              hFind;
    10.  
    11.     wsprintf(szFind, "%s\\*.*", szFolder);                                      // Tìm tất cả
    12.     if (INVALID_HANDLE_VALUE != (hFind = FindFirstFile(szFind, &wfd)))
    13.     {
    14.         do
    15.         {
    16.             wsprintf(szFind, "%s\\%s", szFolder, wfd.cFileName);
    17.             if (!PathIsDirectory(szFind))                                       // Chuỗi tìm thấy không phải là thư mục
    18.             {
    19.                 // Cộng và điểm sáng tên tập tin vừa tìm được trong listbox
    20.                 SendMessage(hList, LB_SETCURSEL, SendMessage(hList, LB_ADDSTRING, 0, (LPARAM)wfd.cFileName), 0);
    21.                 // Nếu muốn hiển thỉ đầy đủ có cả đường dẫn thì thay dòng trên bằng dòng bên dưới
    22.                 // SendMessage(hList, LB_SETCURSEL, SendMessage(hList, LB_ADDSTRING, 0, (LPARAM)szFind), 0);
    23.             }
    24.         }
    25.         while (FindNextFile(hFind, &wfd));                                      // Tìm tên kế tiếp
    26.         FindClose(hFind);                                                       // Chấm dứt tìm kiếm
    27.     }
    28. }

    Hình như bạn muốn mở 1 tập tin text từ hộp thoại tập tin của Windows và cho nó hiển thị trong 1 Edit thì phải :
    Visual C++ Code:
    1. void DoFileOpen(HWND hwnd, HWND hEdit)
    2. {
    3.     OPENFILENAME ofn;
    4.     char szFileName[MAX_PATH];
    5.  
    6.     szFileName[0] = '/0';
    7.     ZeroMemory(&ofn, sizeof(ofn));
    8.  
    9.     ofn.lStructSize = sizeof(OPENFILENAME);
    10.     ofn.hwndOwner = hwnd;
    11.     ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0";
    12.     ofn.lpstrFile = szFileName;
    13.     ofn.nMaxFile = MAX_PATH;
    14.     ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
    15.     ofn.lpstrDefExt = "txt";
    16.  
    17.     if (GetOpenFileName(&ofn))
    18.     {
    19.         HANDLE  hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    20.         if (INVALID_HANDLE_VALUE != hFile)
    21.         {
    22.             DWORD   dwFileSize = GetFileSize(hFile, NULL);
    23.             if (dwFileSize != INVALID_FILE_SIZE)
    24.             {
    25.                 PBYTE   psz = (PBYTE)malloc(dwFileSize + 1);
    26.                 if (psz)
    27.                 {
    28.                     DWORD   dwRead;
    29.                     BOOL bFlag = ReadFile(hFile, psz, dwFileSize, &dwRead, NULL);
    30.                     if (bFlag && dwFileSize == dwRead)
    31.                     {
    32.                         psz[dwFileSize] = '\0';
    33.                         SetWindowText(hEdit, (LPSTR)psz);
    34.                     }
    35.                     free(psz);
    36.                 }
    37.             }
    38.             CloseHandle(hFile);
    39.         }
    40.     }
    41. }
    Nếu làm ntn thì bạn cần học về textbox nhiều dòng hoặc textbox định dạng, mã trên chỉ đúng cho các tập tin text nhỏ và không phải Unicode.

    Về mã của bạn, mình vẫn thấy bạn chưa sửa lại lỗi bước qua trong switch-case đâu nhé.
    Yêu mã hơn yêu em !!!

  3. #3
    Ngày gia nhập
    04 2015
    Nơi ở
    Hà Nội, Vietnam
    Bài viết
    30

    Trích dẫn Nguyên bản được gửi bởi MHoang Xem bài viết
    Đọc mà mình không rõ mục đích của bạn, đưa ra vài cách mà có thể bạn cần.

    Nếu là liệt kê các file có trong 1 thư mục thì bạn tham khảo mã sau :
    Visual C++ Code:
    1. #include<shlwapi.h>                     // Window Shell
    2. #pragma comment(lib,"shlwapi.lib")      // Phân giải cho Shell
    3. // szFolder : Chuỗi đường dẫn thư mục
    4. // hList : Thẻ cửa sổ listbox để hiển thị các tập tin
    5. void EnumFile(PCHAR szFolder, HWND hList)
    6. {
    7.     WIN32_FIND_DATA     wfd;
    8.     CHAR                szFind[MAX_PATH * 2];
    9.     HANDLE              hFind;
    10.  
    11.     wsprintf(szFind, "%s\\*.*", szFolder);                                      // Tìm tất cả
    12.     if (INVALID_HANDLE_VALUE != (hFind = FindFirstFile(szFind, &wfd)))
    13.     {
    14.         do
    15.         {
    16.             wsprintf(szFind, "%s\\%s", szFolder, wfd.cFileName);
    17.             if (!PathIsDirectory(szFind))                                       // Chuỗi tìm thấy không phải là thư mục
    18.             {
    19.                 // Cộng và điểm sáng tên tập tin vừa tìm được trong listbox
    20.                 SendMessage(hList, LB_SETCURSEL, SendMessage(hList, LB_ADDSTRING, 0, (LPARAM)wfd.cFileName), 0);
    21.                 // Nếu muốn hiển thỉ đầy đủ có cả đường dẫn thì thay dòng trên bằng dòng bên dưới
    22.                 // SendMessage(hList, LB_SETCURSEL, SendMessage(hList, LB_ADDSTRING, 0, (LPARAM)szFind), 0);
    23.             }
    24.         }
    25.         while (FindNextFile(hFind, &wfd));                                      // Tìm tên kế tiếp
    26.         FindClose(hFind);                                                       // Chấm dứt tìm kiếm
    27.     }
    28. }

    Hình như bạn muốn mở 1 tập tin text từ hộp thoại tập tin của Windows và cho nó hiển thị trong 1 Edit thì phải :
    Visual C++ Code:
    1. void DoFileOpen(HWND hwnd, HWND hEdit)
    2. {
    3.     OPENFILENAME ofn;
    4.     char szFileName[MAX_PATH];
    5.  
    6.     szFileName[0] = '/0';
    7.     ZeroMemory(&ofn, sizeof(ofn));
    8.  
    9.     ofn.lStructSize = sizeof(OPENFILENAME);
    10.     ofn.hwndOwner = hwnd;
    11.     ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0";
    12.     ofn.lpstrFile = szFileName;
    13.     ofn.nMaxFile = MAX_PATH;
    14.     ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
    15.     ofn.lpstrDefExt = "txt";
    16.  
    17.     if (GetOpenFileName(&ofn))
    18.     {
    19.         HANDLE  hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    20.         if (INVALID_HANDLE_VALUE != hFile)
    21.         {
    22.             DWORD   dwFileSize = GetFileSize(hFile, NULL);
    23.             if (dwFileSize != INVALID_FILE_SIZE)
    24.             {
    25.                 PBYTE   psz = (PBYTE)malloc(dwFileSize + 1);
    26.                 if (psz)
    27.                 {
    28.                     DWORD   dwRead;
    29.                     BOOL bFlag = ReadFile(hFile, psz, dwFileSize, &dwRead, NULL);
    30.                     if (bFlag && dwFileSize == dwRead)
    31.                     {
    32.                         psz[dwFileSize] = '\0';
    33.                         SetWindowText(hEdit, (LPSTR)psz);
    34.                     }
    35.                     free(psz);
    36.                 }
    37.             }
    38.             CloseHandle(hFile);
    39.         }
    40.     }
    41. }
    Nếu làm ntn thì bạn cần học về textbox nhiều dòng hoặc textbox định dạng, mã trên chỉ đúng cho các tập tin text nhỏ và không phải Unicode.

    Về mã của bạn, mình vẫn thấy bạn chưa sửa lại lỗi bước qua trong switch-case đâu nhé.
    đoạn code của mình cũng là 1 cách để liệt kê các file có trong 1 thư mục nhưng là dùng hàm API trong void DoFileOpen(HWND)
    ý mình là nếu mình muốn sử dụng các thư viện của "stdio.h" như fopen(), fread() thì hàm void DoFileOpen(HWND) củmififnh nên chỉnh lại như thế nào?

  4. #4
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    732

    Vài giả sử cho bạn :
    C Code:
    1.     if (GetOpenFileName(&ofn))
    2.     {
    3.         FILE * fp = fopen(szFileName, "r");
    4.         /*
    5.         Thực hiện các công việc nào đó mà bạn muốn như : fread, fgetc, feof, v.v...
    6.         */
    7.         fclose(fp);
    8.     }

    Nhưng một lần nữa, mình khuyên bạn khi bước vào thế giới cửa sổ của Windows với các API thì bạn nên "gác lại" các hàm không phù hợp.
    _ Trong C : printf, scanf, các hàm nhập xuất tập tin,...
    _ Trong C++ : cout, cin, ...
    Windows API thừa đồ chơi cho mấy việc này và nó còn được viết để tạo nhiều thuận lợi cho bạn hết mức.
    Bạn nên tham khảo trong MSDN để biết thêm, từ khóa "Windows API". Chúc bạn học tốt.
    Yêu mã hơn yêu em !!!

  5. #5
    Ngày gia nhập
    04 2015
    Nơi ở
    Hà Nội, Vietnam
    Bài viết
    30

    Trích dẫn Nguyên bản được gửi bởi MHoang Xem bài viết
    Vài giả sử cho bạn :
    C Code:
    1.     if (GetOpenFileName(&ofn))
    2.     {
    3.         FILE * fp = fopen(szFileName, "r");
    4.         /*
    5.         Thực hiện các công việc nào đó mà bạn muốn như : fread, fgetc, feof, v.v...
    6.         */
    7.         fclose(fp);
    8.     }

    Nhưng một lần nữa, mình khuyên bạn khi bước vào thế giới cửa sổ của Windows với các API thì bạn nên "gác lại" các hàm không phù hợp.
    _ Trong C : printf, scanf, các hàm nhập xuất tập tin,...
    _ Trong C++ : cout, cin, ...
    Windows API thừa đồ chơi cho mấy việc này và nó còn được viết để tạo nhiều thuận lợi cho bạn hết mức.
    Bạn nên tham khảo trong MSDN để biết thêm, từ khóa "Windows API". Chúc bạn học tốt.
    mình đang code 1 chương trình liệt kê các file ra 1 thư mục:
    kết quả như sau:
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		filentitled.jpg
Lần xem:	5
Size:		33.5 KB
ID:		35627
    cụ thể: mình nhập thư mục vào ô path:
    kích vào button "start" để tiến hành chạy.
    nhưng khi nhập "c:" thì kết quả không chạy ở ô bên dưới :(

    đoạn code mình đây:
    Code:
    #include <Windows.h>
    #include <stdio.h>
    
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    HWND TEXTBOX1;
    HWND TEXTBOX2;
    
    
    void list_files(const char* parent)
    {
    	WIN32_FIND_DATA fd;
    	char folder[MAX_PATH];
    	wsprintf(folder, "%s\\*.*", parent);
    
    	HANDLE hFind = FindFirstFile(folder, &fd);
    
    	if (hFind != INVALID_HANDLE_VALUE)
    	{
    		do {
    			if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    			{
    				if (strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, ".."))
    				{
    					wsprintf("%s\\%s\n", parent, fd.cFileName);
    					char child[MAX_PATH];
    					wsprintf(child, "%s\\%s", parent, fd.cFileName);
    					list_files(child);
    				}
    			}
    			else
    			{
    				wsprintf("%s\n", fd.cFileName);
    			}
    		} while (FindNextFile(hFind, &fd));
    		FindClose(hFind);
    	}
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    	MSG msg;
    	HWND hwnd;
    	WNDCLASS wc;
    
    	wc.lpszClassName = TEXT("HUY");
    	wc.hInstance = hInstance;
    	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    	wc.style = CS_HREDRAW | CS_VREDRAW;
    	wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
    	wc.lpfnWndProc = WndProc;
    	wc.cbClsExtra = 0;
    	wc.cbWndExtra = 0;
    	wc.lpszMenuName = NULL;
    	RegisterClass(&wc);
    
    	hwnd = CreateWindow(wc.lpszClassName, TEXT("HUY"),
    		WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_MAXIMIZE,
    		300, 300, 750, 700, NULL, NULL, hInstance, NULL);
    
    	ShowWindow(hwnd, nCmdShow);
    	UpdateWindow(hwnd);
    
    	while (GetMessage(&msg,NULL,0,0))
    	{
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    
    	}
    	return (int)msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    	switch (msg)
    	{
    	case WM_CREATE:
    	{
    					  CreateWindow(TEXT("STATIC"), TEXT("Path:"),
    						  WS_CHILD | WS_VISIBLE,
    						  450, 50, 100, 25,
    						  hwnd, NULL, NULL, NULL);
    
    				TEXTBOX1=	  CreateWindow(TEXT("edit"), TEXT(""),
    						  WS_BORDER | WS_CHILD | WS_VISIBLE,
    						  500, 45, 120, 25,
    						  hwnd, (HMENU)1, NULL, NULL);
    
    					  CreateWindow(TEXT("STATIC"), TEXT("List File"),
    						  WS_CHILD | WS_VISIBLE,
    						  400, 150, 100, 25,
    						  hwnd, NULL, NULL, NULL);
    
    				TEXTBOX2=	  CreateWindow(TEXT("EDIT"), TEXT(""),
    						  WS_CHILD | WS_BORDER | WS_VISIBLE,
    						  400, 170, 500, 500,
    						  hwnd, (HMENU)2, NULL, NULL);
    
    					  CreateWindow(TEXT("BUTTON"), TEXT("START"),
    						  WS_CHILD | WS_BORDER | WS_VISIBLE,
    						  500, 100, 100, 25,
    						  hwnd, (HMENU)3, NULL, NULL);
    
    					  return 0;
    	}
    
    		case WM_COMMAND:
    		{
    			if (LOWORD(wParam) == 3)
    			{
    				char szText[MAX_PATH];
    				int iLength = GetWindowTextLength(TEXTBOX1);
    				if (iLength <= 0)
    				{
    					MessageBox(hwnd, TEXT("Error or text is NULL"), TEXT("Huy"), MB_OK | MB_ICONEXCLAMATION); return 0;
    				}
    				else
    				{
    					GetWindowText(TEXTBOX1, szText, iLength + 1);  // Nhận chuỗi vào buffer
    					list_files(szText);
        SetWindowText(TEXTBOX2,szText);
    										
    				}
    				return 0;
    			}
    		}
    
    	case WM_CLOSE:
    	{
    					 DestroyWindow(0);
    					 break;
    	}
    	case WM_DESTROY:
    	{
    					   PostQuitMessage(0);
    					   return 0;
    	}
    	}
    	return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    bạn xem qua hộ mình
    thank
    Attached Thumbnails Attached Thumbnails 11912935_734499619995689_1760683810_n.jpg  
    Đã được chỉnh sửa lần cuối bởi huytohl : 23-08-2015 lúc 10:56 AM.

  6. #6
    Ngày gia nhập
    04 2015
    Nơi ở
    Hà Nội, Vietnam
    Bài viết
    30

    Mặc định cần hỏi về lits file

    helpppppppppppppppppppppppppppppppppp

  7. #7
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    732

    C Code:
    1. void list_files(const char* parent)
    2. {
    3.     WIN32_FIND_DATA fd;
    4.     char folder[MAX_PATH];
    5.     wsprintf(folder, "%s\\*.*", parent);
    6.  
    7.     HANDLE hFind = FindFirstFile(folder, &fd);
    8.  
    9.     if (hFind != INVALID_HANDLE_VALUE)
    10.     {
    11.         do {
    12.             if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    13.             {
    14.                 if (strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, ".."))
    15.                 {
    16.                     wsprintf("%s\\%s\n", parent, fd.cFileName);             // Lỗi ở đây ////////////////////////////
    17.                     char child[MAX_PATH];
    18.                     wsprintf(child, "%s\\%s", parent, fd.cFileName);
    19.                     list_files(child);
    20.                 }
    21.             }
    22.             else
    23.             {
    24.                 wsprintf("%s\n", fd.cFileName);                             // Lỗi ở đây /////////////////////////////
    25.             }
    26.         } while (FindNextFile(hFind, &fd));
    27.         FindClose(hFind);
    28.     }
    29. }
    Yêu mã hơn yêu em !!!

  8. #8
    Ngày gia nhập
    04 2015
    Nơi ở
    Hà Nội, Vietnam
    Bài viết
    30

    Trích dẫn Nguyên bản được gửi bởi MHoang Xem bài viết
    C Code:
    1. void list_files(const char* parent)
    2. {
    3.     WIN32_FIND_DATA fd;
    4.     char folder[MAX_PATH];
    5.     wsprintf(folder, "%s\\*.*", parent);
    6.  
    7.     HANDLE hFind = FindFirstFile(folder, &fd);
    8.  
    9.     if (hFind != INVALID_HANDLE_VALUE)
    10.     {
    11.         do {
    12.             if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    13.             {
    14.                 if (strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, ".."))
    15.                 {
    16.                     wsprintf("%s\\%s\n", parent, fd.cFileName);             // Lỗi ở đây ////////////////////////////
    17.                     char child[MAX_PATH];
    18.                     wsprintf(child, "%s\\%s", parent, fd.cFileName);
    19.                     list_files(child);
    20.                 }
    21.             }
    22.             else
    23.             {
    24.                 wsprintf("%s\n", fd.cFileName);                             // Lỗi ở đây /////////////////////////////
    25.             }
    26.         } while (FindNextFile(hFind, &fd));
    27.         FindClose(hFind);
    28.     }
    29. }

    mình đã chuyển sang list-view để hiển thị danh sách các file vì thấy dùng EDIT không ổn
    Code:
    #include <Windows.h>
    #include <stdio.h>
    #include <CommCtrl.h>
    #include<shlwapi.h>                     // Window Shell
    #pragma comment(lib,"shlwapi.lib")      // Phân giải cho Shell
    
    
    HINSTANCE g_hInst;
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    HWND TEXTBOX1;
    HWND hwndlistview;
    PCHAR szFolder;
    HWND hList;
    
    HWND CreateListView(HWND hwndParent);
    
    
    
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    	MSG msg;
    	HWND hwnd;
    	WNDCLASS wc;
    
    	wc.lpszClassName = TEXT("HUY");
    	wc.hInstance = hInstance;
    	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    	wc.style = CS_HREDRAW | CS_VREDRAW;
    	wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
    	wc.lpfnWndProc = WndProc;
    	wc.cbClsExtra = 0;
    	wc.cbWndExtra = 0;
    	wc.lpszMenuName = NULL;
    	RegisterClass(&wc);
    
    	hwnd = CreateWindow(wc.lpszClassName, TEXT("HUY"),
    		WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_MAXIMIZE,
    		300, 300, 750, 700, NULL, NULL, hInstance, NULL);
    
    	ShowWindow(hwnd, nCmdShow);
    	UpdateWindow(hwnd);
    
    	while (GetMessage(&msg,NULL,0,0))
    	{
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    
    	}
    	return (int)msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    	switch (msg)
    	{
    	case WM_CREATE:
    	{
    					  
    					  hwndlistview = CreateListView(hwnd);
    
    					  CreateWindow(TEXT("STATIC"), TEXT("Path:"),
    						  WS_CHILD | WS_VISIBLE,
    						  450, 50, 100, 25,
    						  hwnd, NULL, NULL, NULL);
    
    				TEXTBOX1=	  CreateWindow(TEXT("edit"), TEXT(""),
    						  WS_BORDER | WS_CHILD | WS_VISIBLE,
    						  500, 45, 120, 25,
    						  hwnd, (HMENU)1, NULL, NULL);
    
    					  CreateWindow(TEXT("STATIC"), TEXT("List File"),
    						  WS_CHILD | WS_VISIBLE,
    						  400, 150, 100, 25,
    						  hwnd, NULL, NULL, NULL);
    
    
    					  CreateWindow(TEXT("BUTTON"), TEXT("START"),
    						  WS_CHILD | WS_BORDER | WS_VISIBLE,
    						  500, 100, 100, 25,
    						  hwnd, (HMENU)3, NULL, NULL);
    
    					  return 0;
    	}
    
    	case WM_COMMAND:
    	{
    					   if (LOWORD(wParam) == 3)
    					   {
    
    						   int iLength = GetWindowTextLength(TEXTBOX1);
    						   WIN32_FIND_DATA     wfd;
    						   CHAR                szFind[MAX_PATH * 2];
    						   HANDLE              hFind;
    
    						   wsprintf(szFind, "%s\\*.*", szFolder);
    						   GetWindowText(TEXTBOX1, szFolder, iLength + 1);
    						   if (INVALID_HANDLE_VALUE != (hFind = FindFirstFile(szFind, &wfd)))
    						   {
    
    							   if (!PathIsDirectory(szFind))                                       // Chuỗi tìm thấy không phải là thư mục
    							   {
    								   SendMessage(hList, LB_SETCURSEL, SendMessage(hList, LB_ADDSTRING, 0, (LPARAM)szFind), 0);
    							   }
    						   }
    						   FindClose(hFind);                                                       // Chấm dứt tìm kiếm
    						   SetWindowText(hwndlistview, szFolder);
    					   }
    	}
    
    				
    				
    	
    
    	case WM_CLOSE:
    	{
    					 DestroyWindow(0);
    					 break;
    	}
    	case WM_DESTROY:
    	{
    					   PostQuitMessage(0);
    					   return 0;
    	}
    	}
    	return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    
    HWND CreateListView(HWND hwndParent)
    {
    	RECT rcClient;  //dimensions of client area
    	HWND hwndLV;	//handle to list-view control
    	
    
    	//Get the dimensions of the parent window's client area, and create the list-view control
    	GetClientRect(hwndParent, &rcClient);
    	hwndLV = CreateWindow(WC_LISTVIEW,
    		TEXT(""),
    		WS_CHILD | LVS_REPORT | LVS_EDITLABELS|WS_VISIBLE|WS_BORDER,
    		150,180,
    		rcClient.right - rcClient.left,
    		rcClient.bottom - rcClient.top,
    		hwndParent,
    		(HMENU)3,
    		g_hInst,
    		NULL);
    
    	return hwndLV;
    }
    nhưng kết quả vẫn không được :(
    đề bài hiển thị tất cả các file trong 1 thư mục. lần trước mình nhầm sang đọc file .TXT hì

  9. #9
    Ngày gia nhập
    12 2016
    Bài viết
    3

    bác biết hàm search file trong folder ko chỉ với

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn