Как получить File Time в C ++ - PullRequest
1 голос
/ 03 марта 2011

У меня проблема с получением времени создания файла. Может кто-нибудь знает, как получить время файла?

Я получил код, который получает имя файла определенного каталога, моя проблема в том, что яНе знаю, как поместить времена файла для каждого файла в каталоге ...

вот мой код:

#include <vector>
#include <string>
#include <windows.h>
#include <stdio.h>
#include <iostream> 
#include <conio.h>
#include <sys\types.h>
#include <sys\stat.h>
#include <time.h>
#include <exception>
#include <WinBase.h>

        using namespace std;
int ifException(string directory) throw()
    {
        DWORD returnvalue;
        returnvalue = GetFileAttributes(directory.c_str());
            if(returnvalue == ((DWORD)-1))
            {
                return 0;
            }
            else
            {   
                return 1;
            }
}



    vector <string> GetPath(string path)
    {



            char directory[9999];
            vector <string> filelist;
            string buffer;
            strcpy_s(directory,path.c_str());
            BOOL checker;




                try
                    {
                        ifException(directory);

                    }catch(int i)
                    {   
                        if (i==0)
                        {
                            _getch();
                            exit(1);
                        }
                    }
                buffer = findFileData.cFileName;
                filelist.push_back(buffer);
                checker = FindNextFile(hFind, &findFileData);
                while(checker)
                {
                    if(checker == 0)
                    {
                        filelist.resize(filelist.size());
                        return filelist;
                    }
                    checker = FindNextFile(hFind, &findFileData);
                    buffer = findFileData.cFileName;
                    filelist.push_back(buffer);;//save file list in vector
                }
                return filelist;
    }

    int main()
    {
       string path;

       path="C:\\Documents and Settings\\OJT\\My Documents\\game\\FSNPC\\*.*";// the directory
       vector <string> handler;
       handler = GetPath(path);
        for (unsigned i=1;i<handler.size()-1;i++)
        {
            cout << handler[i]<<endl;//print out the vector
        }
       _getch();
    }

Ответы [ 5 ]

4 голосов
/ 03 марта 2011

Это для * nix платформ.

   int stat(const char *path, struct stat *buf);
   int fstat(int fd, struct stat *buf);
   int lstat(const char *path, struct stat *buf);

       struct stat {
           dev_t     st_dev;     /* ID of device containing file */
           ino_t     st_ino;     /* inode number */
           mode_t    st_mode;    /* protection */
           nlink_t   st_nlink;   /* number of hard links */
           uid_t     st_uid;     /* user ID of owner */
           gid_t     st_gid;     /* group ID of owner */
           dev_t     st_rdev;    /* device ID (if special file) */
           off_t     st_size;    /* total size, in bytes */
           blksize_t st_blksize; /* blocksize for file system I/O */
           blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
           time_t    st_atime;   /* time of last access */
           time_t    st_mtime;   /* time of last modification */
           time_t    st_ctime;   /* time of last status change */
       };
2 голосов
/ 03 марта 2011

Я думаю, что в Windows API есть функция GetFileTime, посмотрите, я давно не видел Windows.

ОБНОВЛЕНИЕ: Смотрите здесь и здесь

0 голосов
/ 03 марта 2011

Windows, говорите?Используйте GetFileTime .Затем вы, вероятно, захотите использовать FileTimeToSystemTime , чтобы сделать его немного более управляемым (GetFileTime фактически просто возвращает 64-битную метку времени относительно 01 января 1601 года, FileTimeToSystemTime преобразует ее в структуру с полямичасы, минуты, день, месяц и т. д.).

0 голосов
/ 03 марта 2011

Поскольку теперь мы знаем, что вы работаете в Windows, вам нужна функция GetFileTime , которая позволяет вам извлекать создание, последний доступ или последний измененная дата и время для любого файла или каталога. Это делается путем заполнения FILETIME структур (ы) , указанных в качестве аргументов, значениями времени.

BOOL WINAPI GetFileTime(
  __in       HANDLE hFile,                // handle to the file
  __out_opt  LPFILETIME lpCreationTime,   // FILETIME struct for creation time
  __out_opt  LPFILETIME lpLastAccessTime, // FILETIME struct for last access time
  __out_opt  LPFILETIME lpLastWriteTime   // FILETIME struct for last modification time
);

Поскольку все, что вас волнует, это время создания, вы можете игнорировать два последних параметра. Они не являются обязательными. Вы можете найти полный пример получения времени последней записи файла здесь, на MSDN .

Как только вы заполните структуру FILETIME соответствующим значением, вы, вероятно, захотите использовать функцию FileTimeToSystemTime для преобразования этого значения в удобный для отображения формат.

0 голосов
/ 03 марта 2011

Вы не можете. AFAIK время создания не сохраняется. По крайней мере, на Linux. Вы можете использовать fstat для получения последнего измененного времени или последнего времени доступа и еще одной отметки времени, которую я не могу вспомнить. Но время создания не сохраняется.

Может быть, ваша ОС может дать время для создания. Но для этого вам нужно быть более конкретным.

...