Может кому пригодиться Так можно получать список файлов по указаному пути подключаем 2 файла это strsafe.h GetListDir.cpp Вызываем функцию _GetListDirs("C:\\MyData"); и получаем список файлов что находяться по указаному пути C:\\MyData Данные сохраняются в глобальных переменных char *ListProject[1000]; // Массив имен , сюда сохраняться полученные файлы int CountListProject; //Колличество полученных файлов GetListDir.cpp PHP: #include "GetListDir.h" #include <windows.h> #include "strsafe.h" char *ListProject[1000]; // int CountListProject =0; //---------------------------------------- int _GetListDirs(char *argv) { if(CountListProject > 0) //Очищаем выделеную память { for(int b=0; b<CountListProject; b++) delete [] ListProject[b]; } CountListProject =0; WIN32_FIND_DATA ffd; LARGE_INTEGER filesize; TCHAR szDir[MAX_PATH]; size_t length_of_arg; HANDLE hFind = INVALID_HANDLE_VALUE; DWORD dwError=0; // Check that the input path plus 3 is not longer than MAX_PATH. // Three characters are for the "\*" plus NULL appended below. StringCchLength(argv, MAX_PATH, &length_of_arg); // Prepare string for use with FindFile functions. First, copy the // string to a buffer, then append '\*' to the directory name. StringCchCopy(szDir, MAX_PATH, argv); StringCchCat(szDir, MAX_PATH, TEXT("\\*")); // Find the first file in the directory. hFind = FindFirstFile(szDir, &ffd); // List all the files in the directory with some info about them. //Обнуляю счетчик проэктов CountListProject=0; int sz; do { if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { ; } else { filesize.LowPart = ffd.nFileSizeLow; filesize.HighPart = ffd.nFileSizeHigh; ListProject[CountListProject] = new char[256]; StringCbCopy(ListProject[CountListProject], 256, ffd.cFileName); CountListProject++; } } while (FindNextFile(hFind, &ffd) != 0); dwError = GetLastError(); FindClose(hFind); return dwError; } //------------------------------------ скачать strsafe.h Если у вас есть свои варианты буду рад их увидеть
вопрос А как, например, получить все файлы в папке которая лежит вместе с прогой? все, это понял) но теперь вылетает: "Unhandled exception at 0x6412d540 (msvcr100d.dll) in Brute.exe: 0xC0000005: Access violation reading location 0x00000000."
1. Это не с++, это практически си) Если бы тут был С++, то можно было использовать std::string/std::wstring и прочие удобные вещи вроде смартпоинтеров. 2. Что будет, если у меня больше 1000 файлов в директории? 3. Глобальные переменные - не очень хорошо. 4. PHP: if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { ; } else { Ужс...
Code: if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { ; } else { так Code: mask = FILE_ATTRIBUTE_DIRECTORY if (ffd.dwFileAttributes & mask ^ mask){ ...do something.... } или так Code: mask = FILE_ATTRIBUTE_DIRECTORY if ((ffd.dwFileAttributes & mask) == 0){ ...do something.... } или так Code: mask = FILE_ATTRIBUTE_DIRECTORY if (!(ffd.dwFileAttributes & mask)){ ...do something.... } или так Code: mask = FILE_ATTRIBUTE_DIRECTORY if (ffd.dwFileAttributes & mask ? 0 : 1){ ...do something.... }
согласен код не самый лучший но нашол в инете и просто немного подстроил под себя и он не предусмотрен для очень большого списка файлов да тут в коде не более 1000 файлов можно получить а по поводу Ты указываешь полный путь в функцию _GetListDirs(char *argv) ??? У кого есть лучше вариант буду рад увидеть,вариант изложенный мною выше не является самым надежным но для небольших списков работает
указывать нужно полный начиная с диска например C:/Papka можно так получить например например твоя программа находиться гдето в недрах диска а рядом с твоим *.exe лежит папка по имени Papka То делаем так char Dir[1024]; sprintf(Dir, "%s%s", ExtractFileDir(Application->ExeName).c_str(), "\\Papka"); _GetListDir(Dir);
ну и если работаеш на таком низком уровне то не бойся использовать realloc тут этот костыль new не нужен и вместо аллоцирования и копирования юзай strdup
мой вариант, выводит все содержимое своей директории в ListView: Code: #define ID1 123 #include <windows.h> #include <windowsx.h> #include <commctrl.h> HWND hwndFList; HINSTANCE hInstance; char szFileName[256]; char message[512]; LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); BOOL OnCreate(HWND,LPCREATESTRUCT); void OnGetMinMaxInfo(HWND,LPMINMAXINFO); int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR lpCmdLine,int nShowCmd) { HWND hwnd; MSG msg; WNDCLASS wc; hInstance = hInst; InitCommonControls(); memset(&wc,0,sizeof(wc)); wc.hbrBackground = GetStockBrush(WHITE_BRUSH); wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hInstance = hInst; wc.lpfnWndProc = WndProc; wc.lpszClassName = "MainWindow"; wc.style = CS_HREDRAW|CS_VREDRAW; RegisterClass(&wc); hwnd = CreateWindow("MainWindow","File Manager",WS_OVERLAPPEDWINDOW,100,100,640,480,HWND_DESKTOP,NULL,hInst,NULL); ShowWindow(hwnd,nShowCmd); UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch(msg) { HANDLE_MSG(hwnd,WM_CREATE,OnCreate); HANDLE_MSG(hwnd,WM_GETMINMAXINFO,OnGetMinMaxInfo); case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,msg,wParam,lParam); } } BOOL OnCreate(HWND hwnd,LPCREATESTRUCT) { WIN32_FIND_DATA fd; LV_COLUMN lvc; LV_ITEM lvi; char szFileSize[20]; DWORD dwFileSize; int nIndex = 0; HANDLE hFile; HANDLE hOpenFile; hwndFList = CreateWindowEx(0,WC_LISTVIEW,NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT,0,0,640,480,hwnd,(HMENU)ID1,hInstance,NULL); memset(&lvc,0,sizeof(LV_COLUMN)); lvc.mask = LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH; lvc.fmt = LVCFMT_LEFT; lvc.cx = 320; lvc.pszText = "File Name"; ListView_InsertColumn(hwndFList,0,&lvc); lvc.pszText = "File Size"; ListView_InsertColumn(hwndFList,1,&lvc); memset(&lvi,0,sizeof(LV_ITEM)); lvi.mask = LVIF_TEXT; lvi.cchTextMax = sizeof(LPWSTR); hFile = FindFirstFile("*.*",&fd); if(hFile==INVALID_HANDLE_VALUE) return TRUE; else { hOpenFile = CreateFile(fd.cFileName,GENERIC_READ,0,0,OPEN_EXISTING,0,NULL); if(hOpenFile==INVALID_HANDLE_VALUE) dwFileSize = 0; else dwFileSize = GetFileSize(hOpenFile,NULL); wsprintf(szFileSize,"%d",dwFileSize); lvi.pszText = fd.cFileName; lvi.iItem = nIndex; ListView_InsertItem(hwndFList,&lvi); ListView_SetItemText(hwndFList,nIndex,1,szFileSize); nIndex++; CloseHandle(hOpenFile); while(FindNextFile(hFile,&fd)) { hOpenFile = CreateFile(fd.cFileName,GENERIC_READ,0,0,OPEN_EXISTING,0,NULL); if(hOpenFile==INVALID_HANDLE_VALUE) dwFileSize = 0; else dwFileSize = GetFileSize(hOpenFile,NULL); wsprintf(szFileSize,"%d",dwFileSize); lvi.pszText = fd.cFileName; lvi.iItem = nIndex; ListView_InsertItem(hwndFList,&lvi); ListView_SetItemText(hwndFList,nIndex,1,szFileSize); nIndex++; CloseHandle(hOpenFile); } } return TRUE; } void OnGetMinMaxInfo(HWND hwnd, LPMINMAXINFO lpmmi) { lpmmi->ptMinTrackSize.x = 640; lpmmi->ptMinTrackSize.y = 480; lpmmi->ptMaxTrackSize.x = 640; lpmmi->ptMaxTrackSize.y = 480; }
компилирую в MSVC++ 6 --------------------Configuration: AllDir - Win32 Debug-------------------- Compiling... Main.cpp C:\Win32Api\AllDir\Main.cpp(67) : error C2065: 'WS_VISI' : undeclared identifier C:\Win32Api\AllDir\Main.cpp(67) : error C2065: 'BLE' : undeclared identifier C:\Win32Api\AllDir\Main.cpp(67) : error C2065: 'I' : undeclared identifier C:\Win32Api\AllDir\Main.cpp(67) : error C2146: syntax error : missing ')' before identifier 'D1' C:\Win32Api\AllDir\Main.cpp(67) : error C2660: 'CreateWindowExA' : function does not take 11 parameters C:\Win32Api\AllDir\Main.cpp(67) : error C2059: syntax error : ')' C:\Win32Api\AllDir\Main.cpp(86) : error C2065: 'OPEN_EXIS' : undeclared identifier C:\Win32Api\AllDir\Main.cpp(86) : error C2146: syntax error : missing ')' before identifier 'TING' C:\Win32Api\AllDir\Main.cpp(86) : error C2059: syntax error : ')' C:\Win32Api\AllDir\Main.cpp(101) : error C2146: syntax error : missing ')' before identifier 'TING' C:\Win32Api\AllDir\Main.cpp(101) : error C2059: syntax error : ')' Error executing cl.exe. AllDir.exe - 11 error(s), 0 warning(s)
Компиляция без ошибок прошла а вот Построение проекта Build вызвала ошибку --------------------Configuration: AllDir - Win32 Debug-------------------- Linking... Main.obj : error LNK2001: unresolved external symbol __imp__InitCommonControls@0 Debug/AllDir.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe. AllDir.exe - 2 error(s), 0 warning(s) __________ Предпологаю непонятки с этой функцией InitCommonControls();
у тебя должна быть подключена comctl32.lib: Code: #define ID1 123 #include <windows.h> #include <windowsx.h> #include <commctrl.h> [B]#pragma comment(lib, "comctl32.lib")[/B] либо в настройках проекта