Skip to content

Instantly share code, notes, and snippets.

@LisGein
Last active August 29, 2015 14:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LisGein/391befd5c276f966a0e7 to your computer and use it in GitHub Desktop.
Save LisGein/391befd5c276f966a0e7 to your computer and use it in GitHub Desktop.
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <Windows.h>
bool findFile(char * filename, char * mask); // объявление функции содержащее имя и расширение
BOOL GetLastWriteTime(WIN32_FIND_DATA FindFileData, LPTSTR lpszString);
int _tmain(int argc, _TCHAR* argv[])
{
char x;
std::cout << "Ready?" << std::endl;
std::cin >> x;
findFile("C:\\Users\\LisGein\\Documents", ".txt");
std::cout << "Ready?" << std::endl;
std::cin >> x;
findFile("C:\\Users\\LisGein\\Desktop", ".txt");
std::cout << "Ready..." << std::endl;
_getch();//ожидание ввода символа
return 0;
}
bool findFile(char * filename, char * mask)//определение функции
{
WIN32_FIND_DATA FindFileData;//служебная структура для работы с файловой системой
HANDLE hFile;//индификатор файла с которым будет работать переменная
char buf[1000] = { 0 };//объявление массива под название файла
sprintf_s(buf, "%s\\%s", filename, "*.*");//копирование несколько строк в одну(buf) из filename(%s)и *(%s)
hFile = FindFirstFile(buf, &FindFileData);//открытие файла коневой системы, создается индефикатор и записаывается в hFile
if (hFile != INVALID_HANDLE_VALUE) // проверка на успешное открытие
{
do
{
sprintf_s(buf, "%s\\%s", filename, FindFileData.cFileName);
if (strstr(FindFileData.cFileName, mask) != NULL) // поиск фалов с расширением txt
{
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);
std::cout << FindFileData.cFileName << " \t";//вывод названия файла txt файла на экран
char str[100] = { 0 };
GetLastWriteTime(FindFileData, str);
}
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//проверка является файл каталогом
{
if (strcmp(FindFileData.cFileName, "..") != 0 && strcmp(FindFileData.cFileName, ".") != 0)
{
findFile(buf, mask);//запуск рекурсии с текущим параметром
}
}
}
while (FindNextFile(hFile, &FindFileData) != 0);//пока есть файлы
FindClose(hFile);
}
return true;
}
BOOL GetLastWriteTime(WIN32_FIND_DATA FindFileData, LPTSTR lpszString)
{
FILETIME ftCreate, ftAccess, ftWrite;
SYSTEMTIME stUTC, stLocal; // Извлекаем файловое время для файла.
SYSTEMTIME Time;
ftCreate = FindFileData.ftCreationTime;
ftWrite = FindFileData.ftLastWriteTime;
ftAccess = FindFileData.ftLastAccessTime;
GetSystemTime(&Time);// Преобразуем время последней записи в местное время.
FileTimeToSystemTime(&ftWrite, &stUTC);
SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);// Создаем строку, показывающую дату и время.
if (Time.wDay > stLocal.wDay | Time.wMonth > stLocal.wMonth | Time.wYear > stLocal.wYear)
{
HANDLE hOUTPUT = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hOUTPUT, FOREGROUND_RED | FOREGROUND_INTENSITY);
wsprintf(lpszString, TEXT("%02d/%02d/%d %02d:%02d"),
stLocal.wMonth, stLocal.wDay, stLocal.wYear,
stLocal.wHour, stLocal.wMinute);
std::cout << lpszString << std::endl;
}
else
{
HANDLE hOUTPUT = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hOUTPUT, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
wsprintf(lpszString, TEXT("%02d/%02d/%d %02d:%02d"),
stLocal.wMonth, stLocal.wDay, stLocal.wYear,
stLocal.wHour, stLocal.wMinute);
std::cout << lpszString << std::endl;
}
return TRUE;
}
//thanks Boris
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment