Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Определение типа файла и перенос его в папку в зависимости от типа

#cpp


В папке имеется несколько файлов.  Требуется определить тип каждого файла и в зависимости
от этого перенести его в одну из папок:

EXE.
CPP.
H.
TXT.

Вроде бы формулировка простая, но никак не могу сделать, мыслей нет, помогите, если
не трудно. Заранее спасибо.    


Ответы

Ответ 1



Как мне кажется, нужно копать в сторону функции findfirst() и проверки строки из имени по шаблону . с последующей сортировкой и презаписи в другой каталог. Ну и еще, как вариант, написать скрипт на shell и запускать его из приложения. UPD: вот немного кода в котором происходит поиск надо только немного изменить (произвести копирование) #include #include using namespace std; int main(){ WIN32_FIND_DATA FindFileData; HANDLE hFind = INVALID_HANDLE_VALUE; // Find the first file in the directory. hFind = FindFirstFile("C:\\*.bin", &FindFileData); if (hFind == INVALID_HANDLE_VALUE) { printf ("Invalid file handle. Error is %u.\n", GetLastError()); } else { printf ("First file name is %s.\n", FindFileData.cFileName); // List all the other files in the directory. while (FindNextFile(hFind, &FindFileData) != 0){ printf ("Next file name is %s.\n", FindFileData.cFileName); } FindClose(hFind); } return 0; }

Ответ 2



Перебираете имена файлы в папке. Ищите в имени файла точку. Проверяете текст после нее, и если подходит под один из заданных, то, переименовывая файл, отправляете его в нужную папку. В *nix посмотрите man-ы на opendir, readdir, rename (для винды посмотрите в гугле их аналоги), а также strchr, strcmp, strcpy (или snprintf) ...

Ответ 3



Тогда вот однострочник на PowerShell: Get-ChildItem -Path *.cpp, *.h, *.exe, *.txt | ForEach-Object { Move-Item $_ -Destination $(Join-Path $_.Extension.Substring(1) $_.Name) } Или чуть более длинно на C#: var exts = new HashSet { ".exe", ".cpp", ".h", ".txt" }; foreach (var fi in new DirectoryInfo(path).EnumerateFiles("*.cpp") .Where(fi => exts.Contains(fi.Extension))) fi.MoveTo(Path.Combine(path, fi.Extension.Substring(1), fi.Name));

Ответ 4



На Питоне: import os extensions = '.EXE', '.CPP', '.H', '.TXT' for name in os.listdir(): # все имена в текущей директории if name.upper().endswith(extensions): # имя имеет нужное расширение ext = os.path.splitext(name)[1] # изымаем расширение из имени new_name = os.path.join(ext[1:].upper(), name) # новое имя в соответствующей директории os.replace(name, new_name) # переносим

Комментариев нет:

Отправить комментарий