2014-11-09 2 views
1

У меня есть существующий файл на компьютере, и мне было интересно узнать, когда это было сделано, размер файла и другие свойства файла.
Я попытался использовать в ifstream Но есть информация у меня есть в файле
(я использую Visual C++ 6.0, не может с помощью Boost)Как получить информацию о файле?

+2

Серьезно VC6? Как в пятнадцать лет? Вероятно, вы хотите либо [stat] (http://msdn.microsoft.com/en-us/library/14h5k7ff.aspx) использовать POSIX-подобный API, либо [GetFileAttributes] (http://msdn.microsoft.com/) en-gb/library/windows/desktop/aa364946.aspx) из Windows API. – Rup

+2

MFC (с которым вы отметили этот вопрос) предлагает ['CFileFind'] (http://msdn.microsoft.com/en-us/library/3h3beets (v = vs.80) .aspx), что должно дать вы, что ищете. – WhozCraig

+0

WhozCraig, Как я могу открыть с CFileFind, что мой файл? –

ответ

4

Посмотрите на функции GetFileAttributesEx.

#include <windows.h> 

WIN32_FILE_ATTRIBUTE_DATA fInfo; 

GetFileAttributesEx("test.dat", GetFileExInfoStandard, &fInfo); 

WIN32_FILE_ATTRIBUTE_DATA содержит много «общих» информаций файлов (размер, создание/редактирование времени, атрибуты).

Update: Я только что видел, что вы используете Visual C++ 6. Поскольку GetFileAttributesEx поддерживается начиная с Windows XP он может быть недоступен в заголовках API WIN ... Вы можете использовать функцию с помощью динамического связывания. Следующий код делает то же самое, что и фрагмент из выше:

/* clone definition of WIN32_FILE_ATTRIBUTE_DATA from WINAPI header */ 
typedef struct file_info_struct 
{ 
    DWORD dwFileAttributes; 
    FILETIME ftCreationTime; 
    FILETIME ftLastAccessTime; 
    FILETIME ftLastWriteTime; 
    DWORD nFileSizeHigh; 
    DWORD nFileSizeLow; 
} FILE_INFO; 

/* function pointer to GetFileAttributesEx */ 
typedef BOOL (WINAPI *GET_FILE_ATTRIBUTES_EX)(LPCWSTR lpFileName, int fInfoLevelId, LPVOID lpFileInformation); 


HMODULE hLib; 
GET_FILE_ATTRIBUTES_EX func; 
FILE_INFO fInfo; 

hLib = LoadLibrary("Kernel32.dll"); 
if (hLib != NULL) 
{ 
    func = (GET_FILE_ATTRIBUTES_EX)GetProcAddress(hLib, "GetFileAttributesExW"); 
    if (func != NULL) 
    { 
     func("test.dat", 0, &fInfo); 
    } 

    FreeLibrary(hLib); 

    /* 
    ** Don't call func after FreeLibrary !!! 
    ** It should be ok since kernel32.dll is loaded by your application anyway but if 
    ** you get a function pointer from a dll only loaded by LoadLibrary the function 
    ** pointer is invalid once the library if freed. 
    */ 
} 
+0

Большое спасибо! Как просмотреть дату создания файла? fInfo.ftCreationTime - FILETIME (это число 100-наносекундных интервалов с 1 января), так как я могу просмотреть дату? (dd/mm/yyyy) –

+0

@MikeBrown Посмотрите на функцию 'FileTimeToSystemTime'. –

+1

Вы смешиваете кодировки символов. Если вы используете 'LPCTSTR' в объявлении прототипа функции, вы не можете использовать' 'GetFileAttributesExA'' для поиска указателя функции. Либо используйте «LPCSTR» в своем объявлении (с «GetFileAttributesExA»), либо используйте версию Unicode, указав «LPCWSTR» в своем прототипе и имя функции «GetFileAttributesExW». Последнее настоятельно рекомендуется. – IInspectable

2

размера и создания данных (и больше) доступны через FindFirstFile.

Смежные вопросы