Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Как узнать информацию о файле?


Автор: Green_eyed 5.7.2007, 13:13
Есть полный путь к файлу. Нужно узнать размер, дату и время создания/последнего изменения. Как это сделать?
Использовать класс TFileStream не получится - с его помощью нельзя открывать скрытые и системные файлы, а мне надо.

Автор: Klin 5.7.2007, 13:23
Код

include <SysUtils.hpp>
struct TSearchRec
{
  int Time;        // время создания файла
  int Size;        // размер файла в байтах
  int Attr;        // аттрибуты файла
  AnsiString Name;       // имя его
  int ExcludeAttr;
  int FindHandle;
  _WIN32_FIND_DATAA FindData;
};

Автор: Green_eyed 7.7.2007, 19:26
Цитата(Klin @ 5.7.2007,  13:23)
Код

include <SysUtils.hpp>
struct TSearchRec
{
  int Time;        // время создания файла
  int Size;        // размер файла в байтах
  int Attr;        // аттрибуты файла
  AnsiString Name;       // имя его
  int ExcludeAttr;
  int FindHandle;
  _WIN32_FIND_DATAA FindData;
};

Да это я знаю. А как мне узнать время последнего редактирования?

Автор: Alexeis 7.7.2007, 19:38
Функция GetFileAttributesEx(); возвращает.

Автор: Green_eyed 9.7.2007, 14:59
Спасибо за функцию. А как перевести FILETIME в TDateTime?

Автор: Rodman 9.7.2007, 15:05
Код

void GetFileData(char * FilePath)
{
 TWin32FileAttributeData fi;
 TFileTime ft1;
 TSystemTime st;
 GetFileAttributesEx("r.txt", GetFileExInfoStandard,
                              &fi);
 Edit1->Text = IntToStr(fi.nFileSizeLow)+" килограмм";

 ft1 = fi.ftLastAccessTime;    //дата последнего доступа
 FileTimeToSystemTime(&ft1,&st);
 Edit2->Text = IntToStr(st.wDay)+'.'+IntToStr(st.wMonth)+'.'
               +IntToStr(st.wYear);

 ft1 = fi.ftLastWriteTime;     //дата последней модификации
 FileTimeToSystemTime(&ft1,&st);
 Edit3->Text = IntToStr(st.wDay)+'.'+IntToStr(st.wMonth)+'.'
             +IntToStr(st.wYear);
 //и так далее...
}
это имелось ввиду?

Автор: Alexeis 9.7.2007, 15:07
через SystemTime. FileTimeToSystemTime() + SystemTimeToDateTime()

Автор: Green_eyed 9.7.2007, 20:24
Всем спасибо. Тема закрыта.

P.S. К результату SystemTimeToDateTime() почему-то надо было еще 4 часа прибавить.

Автор: dumb 10.7.2007, 02:04
Цитата(Green_eyed @  9.7.2007,  21:24 Найти цитируемый пост)
P.S. К результату SystemTimeToDateTime() почему-то надо было еще 4 часа прибавить.

что такое "часовые пояса" знаешь? http://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B5%D0%B4%D0%BD%D0%B5%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F_%D0%BF%D0%BE_%D0%93%D1%80%D0%B8%D0%BD%D0%B2%D0%B8%D1%87%D1%83

Код

        TFileTime ftl;
        TSystemTime st;
...
        FileTimeToLocalFileTime( &fi.ftLastWriteTime, &ftl );
        FileTimeToSystemTime( &ftl, &st );
        TDateTime dt = SystemTimeToDateTime( st );


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)