Поиск файлов и копирование их C++\Asm в общем я ламерюга пока что=) в C++ 2 дня мне надо чтобы был поиск *.txt файлов в C:\123\ и копирование этих найденных файлов в D:\123\ кто может напишите скрипт этого буду очень благодарен)) заранее спасибо) собираюсь asm изучать дак вот если у кого есть на asm то что я прошу на c++ то выкладывайте) ах да и еще желательно разжевать все =)
Избався от слова СКРИПТ или учи PHP|Perl и т.д. Code: SHFILEOPSTRUCT s; s.wFunc = FO_COPY; s.pFrom = "c:\\123\\*.txt\0"; s.pTo = "d:\\123"; SHFileOperation(&s);
а я садист и у меня кода меньше ))) system("@for %1 in (\"C:\\123\\*.txt\") do @copy \"%1\" \"D:\\123\\\">>nul");
а если надо искать на всех жестких дисках? эт сработает?=) мне ведь надо не просто копировать из 123\*.txt а чтобы копировались из 123\1 и 123\2 123\3 и т.д. ушел пробовать)
slesh, работает но то что в папке C:\123\123 не копирует) и еще там запускается черное окошко это чо cmd чтоли? бред;d батч ... >_<
ну тогда юзай апинки FindFirstFile FindNextFile и если попадается каталог то рекурсивно запускай данную функцию
PHP: #include <windows.h> #include <tchar.h> #include <stdio.h> #include <strsafe.h> void DisplayErrorBox(LPTSTR lpszFunction); int _tmain(int argc, TCHAR *argv[]) { WIN32_FIND_DATA ffd; LARGE_INTEGER filesize; TCHAR szDir[MAX_PATH]; size_t length_of_arg; HANDLE hFind = INVALID_HANDLE_VALUE; DWORD dwError=0; // If the directory is not specified as a command-line argument, // print usage. if(argc != 2) { _tprintf(TEXT("\nUsage: %s <directory name>\n"), argv[0]); return (-1); } // Check that the input path plus 3 is not longer than MAX_PATH. // Three characters are for the "\*" plus NULL appended below. StringCchLength(argv[1], MAX_PATH, &length_of_arg); if (length_of_arg > (MAX_PATH - 3)) { _tprintf(TEXT("\nDirectory path is too long.\n")); return (-1); } _tprintf(TEXT("\nTarget directory is %s\n\n"), argv[1]); // 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[1]); StringCchCat(szDir, MAX_PATH, TEXT("\\*")); // Find the first file in the directory. hFind = FindFirstFile(szDir, &ffd); if (INVALID_HANDLE_VALUE == hFind) { DisplayErrorBox(TEXT("FindFirstFile")); return dwError; } // List all the files in the directory with some info about them. do { if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { _tprintf(TEXT(" %s <DIR>\n"), ffd.cFileName); } else { filesize.LowPart = ffd.nFileSizeLow; filesize.HighPart = ffd.nFileSizeHigh; _tprintf(TEXT(" %s %ld bytes\n"), ffd.cFileName, filesize.QuadPart); } } while (FindNextFile(hFind, &ffd) != 0); dwError = GetLastError(); if (dwError != ERROR_NO_MORE_FILES) { DisplayErrorBox(TEXT("FindFirstFile")); } FindClose(hFind); return dwError; } void DisplayErrorBox(LPTSTR lpszFunction) { // Retrieve the system error message for the last-error code LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); // Display the error message and clean up lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf)+lstrlen((LPCTSTR)lpszFunction)+40)*sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("%s failed with error %d: %s"), lpszFunction, dw, lpMsgBuf); MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); } Пример с мсдн 1. Ищеш первый попавшийся файл\дирректорию hFind = FindFirstFile(szDir, &ffd); 2. Проверяеш Что это ffd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY дирректория или нет 3. Если нет то проверяеш удовлетворяет ли он условиям поиска 4. Далее если удовлетворяет то делаеш с ним че тебе надо 5. Далее вызываеш while (FindNextFile(hFind, &ffd) != 0) Тут так же как и выше проверяеш что это и условия поиска. 6. Если же это дирректория то вызываеш все это дело еще раз только с имянем той дирректории которую ты нашел. Тут на форуме где то было. Кто то писал на С++ прогу которая тырит историю QIP там метод поиска такого какого тебе надо в подробностях.