1

ファイル時間の作成に問題があります。ファイル時間を取得する方法を誰かが知っていますか?

特定のディレクトリのファイル名を取得するコードを取得しました。問題は、ディレクトリ内の各ファイルにファイル時間を配置する方法がわからないことです...

これが私のコードです:

#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();
    }
4

5 に答える 5

4

これは*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 */
       };
于 2011-03-03T08:46:12.040 に答える
2

Windows APIには機能があると思いますGetFileTime。調べてみてください。しばらくの間、Windowsを見ていません。

更新:ここここを見てください

于 2011-03-03T08:49:26.217 に答える
1

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
);

気になるのは作成時間だけなので、最後の2つのパラメーターは無視してかまいません。それらはオプションです。ファイルの最終書き込み時刻を取得する完全なサンプルは、MSDNにあります。

FILETIME構造体に適切な値を入力したら、関数を使用してFileTimeToSystemTimeその値を表示しやすい形式に変換することをお勧めします。

于 2011-03-03T08:50:04.970 に答える
1

Windows、あなたは言いますか?GetFileTimeを使用します。次に、FileTimeToSystemTimeを使用して、もう少し管理しやすくすることをお勧めします(GetFileTime事実上、1601年1月1日を基準にした64ビットのタイムスタンプを返すだけでFileTimeToSystemTime、時間、分、日、月などのフィールドを持つ構造に変換されます。 。)。

于 2011-03-03T08:50:15.047 に答える
0

できません。AFAIK作成時間は保存されません。少なくともLinuxでは。fstatを使用して、最後の変更時刻または最後のアクセス時刻と、覚えていないもう1つのタイムスタンプを取得できます。ただし、作成時間は保存されません。

たぶんあなたのOSは作成時間を与えることができます。しかし、これについては、より具体的にする必要があります。

于 2011-03-03T08:49:06.733 に答える