#include #include #include #include #define MAX_PATH_LEN 1024 static FILE *fp = NULL; static int processed_count = 0, failed_count = 0; static void FindFiles(const char *path) { WIN32_FIND_DATA *DTA = (WIN32_FIND_DATA *) malloc(sizeof(WIN32_FIND_DATA)); char *filename = (char *) malloc(MAX_PATH_LEN); HANDLE handle; static FILETIME lft; static SYSTEMTIME st; const int flag = *CharPrev(path, strchr(path, '\0')) == '\\'; memset(filename, 0, MAX_PATH_LEN); strncpy(filename, path, MAX_PATH_LEN - 1); if (strcmp(filename + 1, ":\\")) { if ((handle = FindFirstFile(filename, DTA)) == INVALID_HANDLE_VALUE) { failed_count++; goto out; } FindClose(handle); } else { DTA->dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY; } if (DTA->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { _snprintf(filename, MAX_PATH_LEN - 1, "%s%s*", path, flag ? "" : "\\"); if ((handle = FindFirstFile(filename, DTA)) == INVALID_HANDLE_VALUE) { failed_count++; goto out; } do { char *cp = DTA->cFileName[0] == '\0' ? DTA->cAlternateFileName : DTA->cFileName; _snprintf(filename, MAX_PATH_LEN - 1, "%s%s%s", path, flag ? "" : "\\", cp); if (DTA->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (strcmp(cp, ".") != 0 && strcmp(cp, "..") != 0) { FindFiles(filename); FileTimeToLocalFileTime(&DTA->ftLastWriteTime, &lft); FileTimeToSystemTime(&lft, &st); fprintf(fp, "%4d-%02d-%02d %02d:%02d:%02d %s\\\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, filename); processed_count++; } } else { FileTimeToLocalFileTime(&DTA->ftLastWriteTime, &lft); FileTimeToSystemTime(&lft, &st); fprintf(fp, "%4d-%02d-%02d %02d:%02d:%02d %s\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, filename); processed_count++; } } while (FindNextFile(handle, DTA)); FindClose(handle); } else { FileTimeToLocalFileTime(&DTA->ftLastWriteTime, &lft); FileTimeToSystemTime(&lft, &st); fprintf(fp, "%4d-%02d-%02d %02d:%02d:%02d %s\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, filename); processed_count++; } out: ; free(filename); free(DTA); } int main(int argc, char *argv[]) { static char buffer[4096]; char *cp; int i; memset(buffer, 0, sizeof(buffer)); if (GetModuleFileName(NULL, buffer, sizeof(buffer) - 1) == 0) goto out; cp = strchr(buffer, '\0'); while (*(cp = CharPrev(buffer, cp)) != '\\'); if (cp == buffer + 2) cp++; *cp = '\0'; if (SetCurrentDirectory(buffer) == 0 || (fp = fopen("Stamp_DB.txt", "a")) == NULL) { fprintf(stderr, "Can't create DB file.\n"); goto out; } for (i = 1; i < argc; i++) FindFiles(argv[i]); fclose(fp); out: ; printf(" %d processed. %d failed.\n", processed_count, failed_count); for (i = 0; i < 100; i++) { Sleep(100); if (kbhit()) break; } return 0; }