Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> команда Dir, вывод даты создания текстового файла 
V
    Опции темы
Martisha
Дата 28.11.2008, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



добрый день)
вопрос такой:
есть код, в котором сканируется папка и имена найденных в ней текстовых файлов добавляются в ListBox, что нужно добавить в код чтобы выводилась вместе с именем и дата создания файла? 
вот код:
Код

Procedure TForm1.ScanFolder(Dir:String);
   Var
 SearchRec:TSearchRec;
begin
 try
  if Dir<>'' then Dir:=IncludeTrailingPathDelimiter(Dir); 
FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then 
   repeat
      begin
       if AnsiUpperCase(ExtractFileExt(SearchRec.name)) = '.TXT' then 
       EditFile(Dir+SearchRec.name); //здесь мы вызываем функцию и присваиваем имя файла
      end;
   until FindNext(SearchRec)<>0;
  FindClose(SearchRec);
 finally
 end;
end;


Это сообщение отредактировал(а) Martisha - 28.11.2008, 08:21
PM MAIL ICQ   Вверх
mrbrooks
Дата 28.11.2008, 08:53 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



Martisha, в данном случае ты делаешь велосипед на мой взгляд. в VCL есть компонент FileListBox. 
Его свойство
Drive - определяет диск 
Directory - определяет каталог - по умолчанию корневой
Mask -  определяет фильтрацию (в твоем случае - *.txt) 

PM MAIL   Вверх
AntonN
Дата 28.11.2008, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



дата создания хранится в SearchRec.FindData.ftCreationTime, передавай еще одним параметром в EditFile()

Это сообщение отредактировал(а) AntonN - 28.11.2008, 09:01


--------------------
user posted image
PM MAIL WWW   Вверх
aleksh
Дата 28.11.2008, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 1
Всего: 13



у структуры TSearchRec помимо значения name есть и date, можно его через datetostr() передавать в listbox, например функцие EditFile() передавать еще одну переменную
но все же, Martisha, уверенна, что именно это надо?
PM MAIL   Вверх
Martisha
Дата 28.11.2008, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



Цитата(mrbrooks @  28.11.2008,  08:53 Найти цитируемый пост)
в VCL есть компонент FileListBox. 

подробнее..если можно smile 


Цитата(AntonN @  28.11.2008,  08:56 Найти цитируемый пост)
дата создания хранится в SearchRec.FindData.ftCreationTime

ятак делала, но вылазят ошибки(

Добавлено через 45 секунд
Цитата(aleksh @  28.11.2008,  09:04 Найти цитируемый пост)
но все же, Martisha, уверенна, что именно это надо?

да, это очень нужно

Добавлено через 5 минут и 6 секунд
Цитата(aleksh @  28.11.2008,  09:04 Найти цитируемый пост)
у структуры TSearchRec помимо значения name есть и date

на date ругается
PM MAIL ICQ   Вверх
aleksh
Дата 28.11.2008, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 1
Всего: 13



Цитата(Martisha @  28.11.2008,  09:08 Найти цитируемый пост)
на date ругается

видмо память меня подводит. в справке по TSearchRec все довольно хорошо описано, есть там атрибут хранящий дату и время, в переменно, если не путаю, типа datetime, ее нужно отдельно в строку переводить, может по этому ошибки?
PM MAIL   Вверх
Martisha
Дата 28.11.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



Цитата(aleksh @  28.11.2008,  09:28 Найти цитируемый пост)
может по этому ошибки? 

может..

Цитата(aleksh @  28.11.2008,  09:28 Найти цитируемый пост)
в справке по TSearchRec все довольно хорошо описано

сейчас почитаю)
PM MAIL ICQ   Вверх
mrbrooks
Дата 28.11.2008, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



Цитата(Martisha @  28.11.2008,  09:32 Найти цитируемый пост)
в справке по TSearchRec все довольно хорошо описано

сейчас почитаю) 


о FileListBox кстати тоже  smile 


PM MAIL   Вверх
Martisha
Дата 28.11.2008, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



Цитата(mrbrooks @  28.11.2008,  09:37 Найти цитируемый пост)
о FileListBox кстати тоже   

 smile 
PM MAIL ICQ   Вверх
Christoph
Дата 28.11.2008, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 5
Всего: 11



Цитата(aleksh @ 28.11.2008,  09:04)
у структуры TSearchRec помимо значения name есть и date

Там нету такого поля date


FindData (Windows only) contains additional information such as the file creation time, last access time, and both the long and short file names.

Это сообщение отредактировал(а) Christoph - 28.11.2008, 12:14


--------------------
user posted image
PM MAIL ICQ   Вверх
THandle
Дата 28.11.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Код

  TSearchRec = record
    Time: Integer;
    Size: Int64;
    Attr: Integer;
    Name: TFileName;
    ExcludeAttr: Integer;
{$IFDEF MSWINDOWS}
    FindHandle: THandle  platform;
    FindData: TWin32FindData  platform;
{$ENDIF}
{$IFDEF LINUX}
    Mode: mode_t  platform;
    FindHandle: Pointer  platform;
    PathOnly: String  platform;
    Pattern: String  platform;
{$ENDIF}
  end;


Дату и время хранит поле Time. smile
PM   Вверх
aleksh
Дата 28.11.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 1
Всего: 13



toTHandle: спасибо
все таки, пора по новой инсталить делфи, а то как-то неловко, в самом деле...
PM MAIL   Вверх
Martisha
Дата 28.11.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



Цитата(Christoph @  28.11.2008,  12:11 Найти цитируемый пост)
Там нету такого поля date

точно)

THandle, и что с этим делать?  smile

Добавлено через 2 минуты и 12 секунд
mrbrooks
Цитата(mrbrooks @  28.11.2008,  08:53 Найти цитируемый пост)
Mask -  определяет фильтрацию (в твоем случае - *.txt) 

ну с этим понятно, а вот
Цитата(mrbrooks @  28.11.2008,  08:53 Найти цитируемый пост)
Drive - определяет диск 
Directory - определяет каталог - по умолчанию корневой

это не совсем ясно..в справке очень мало написано
PM MAIL ICQ   Вверх
aleksh
Дата 28.11.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 1
Всего: 13



Цитата(Martisha @  28.11.2008,  12:55 Найти цитируемый пост)
и что с этим делать?

конвертировать в нужный формат smile
PM MAIL   Вверх
Christoph
Дата 28.11.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 5
Всего: 11



FindData хранит время создания файла. Валер ты читал мой пост выше? Хотя написано что в Time хранться тоже время создания, надо проверить

Это сообщение отредактировал(а) Christoph - 28.11.2008, 13:29


--------------------
user posted image
PM MAIL ICQ   Вверх
Martisha
Дата 28.11.2008, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



Цитата(Christoph @  28.11.2008,  13:13 Найти цитируемый пост)
написано что в Time хранться тоже время создания, надо проверить

я пробовала, только в результате выводится число имесяц правильно, а дальше какой то набор цифр

Добавлено через 1 минуту и 26 секунд
Цитата(Christoph @  28.11.2008,  13:13 Найти цитируемый пост)
FindData хранит время создания файла

а с FindData сложнее, не совсем понятно как с ним работать

Добавлено через 2 минуты и 5 секунд
и всправке про FindData ненаписано практически ничего
PM MAIL ICQ   Вверх
Christoph
Дата 28.11.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 5
Всего: 11



с Time у меня выводит набор чисел...только через FindData нада, если получится выложу ....


--------------------
user posted image
PM MAIL ICQ   Вверх
aleksh
Дата 28.11.2008, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 1
Всего: 13



Martisha, надо изменить формат вывода даты и времени, делфи под рукой нет, код привести не могу, но почитать об этом можно в справке по типу timedate (или datetime, где же моя память)
PM MAIL   Вверх
THandle
Дата 28.11.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Стоп. Что вам тут надо? Вывести дату файла? Так есть же функция FileDateToDateTime например:

Код

ShowMessage(DateToStr(FileDateToDateTime(SearchRec.Time)));


Это сообщение отредактировал(а) THandle - 28.11.2008, 14:24
PM   Вверх
Martisha
Дата 28.11.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



вот такой вот код нашла, осталось только добавить в ListBox, чтоб рядом с названием файла отображалось:
Код

procedure TForm1.Button5Click(Sender: TObject);
Var
  Data: TWin32FindData;
  H: THandle;
  SysTime: TSystemTime;
  Date: TDateTime;
begin
 H := FindFirstFile(PChar('c:\ROU99STAT'), Data);
  If H <> Cardinal(-1) Then
  Try
    FileTimeToSystemTime(Data.ftCreationTime, SysTime);
    Date := SystemTimeToDateTime(SysTime);
    { Date }
    ShowMessage('дата создания ' + DateToStr(Date));
    { Time }
    ShowMessage(эвремя создания ' + TimeToStr(Date));
  Finally
    Windows.FindClose(H);
  End;
end;


Добавлено через 5 минут и 13 секунд
THandle, мне нужнои дату и времясоздания папки получить и чтоб все это выводилось в ListBox, т.е. там должно выводиться название файла и имя..

Добавлено через 13 минут и 48 секунд
Код

EditFile(Dir+SearchRec.name+DateToStr(FileDateToDateTime(SearchRec.Time)));

так только число выводит, а время как вывести?
PM MAIL ICQ   Вверх
Rrader
  Дата 28.11.2008, 14:43 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 18
Всего: 191



Martisha, нашли мой старый код smile 
Код

procedure TForm1.ScanFolderForTxt(Folder: String);
var
  Data: TWin32FindData;
  Res: DWORD;
  SysTime: TSystemTime;
  LocalTime: TFileTime;
  S: String;
  Date: TDateTime;
begin
  Folder := IncludeTrailingPathDelimiter(Folder);
  Res := FindFirstFile(PChar(Folder + '*.txt'), Data);
  if Res <> INVALID_HANDLE_VALUE then
  try
    with Form1.ListBox1.Items do
    begin
      BeginUpdate;
      try
        repeat
          FileTimeToLocalFileTime(Data.ftCreationTime, LocalTime);
          FileTimeToSystemTime(LocalTime, SysTime);
          Date := SystemTimeToDateTime(SysTime);
          S := Folder + Data.cFileName + ' (Дата создания: ' +
            DateToStr(Date) + ')';
          Add(S);
        until not FindNextFile(Res, Data);
      finally
        EndUpdate;
      end;
    end;  
  finally
    Windows.FindClose(Res);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ScanFolderForTxt('C:\MyFolder\');
end;

P.S.
Поправил

Это сообщение отредактировал(а) Rrader - 1.12.2008, 16:27


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Martisha
Дата 28.11.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



Цитата(Christoph @  28.11.2008,  14:17 Найти цитируемый пост)
только через FindData нада, если получится выложу 

было бы неплохо, самой не получается разобраться(

Добавлено через 2 минуты и 21 секунду
Цитата(Rrader @  28.11.2008,  14:43 Найти цитируемый пост)
Martisha, нашли мой старый код  

ага))

Добавлено через 12 минут и 44 секунды
вернее ее кто то ужеизменил и я уже нашла его)

Rrader, помоги мне разобраться в своейпроцедуре, пока ничего не пойму
PM MAIL ICQ   Вверх
Christoph
Дата 28.11.2008, 15:11 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 5
Всего: 11



Мой код медленееsmile 
Чтоб показать что мой код тупит допишу еще вот что
Код

Screen.Cursor := crHourGlass;

 smile 
Код

procedure TForm1.Button1Click(Sender: TObject);
Var SR:TSearchRec;
    FindRes:Integer;
    SystemTime: TSystemTime;
    Date:TDateTime;
begin
ListBox1.Clear;

FindRes:=FindFirst('c:\Downloads\*.rar',faAnyFile,SR);
Screen.Cursor := crHourGlass;
While FindRes=0 do
   begin
         FileTimeToSystemTime(SR.FindData.ftCreationTime, SystemTime);
         Date:=SystemTimeToDateTime(SystemTime);
         ListBox1.Items.Add(SR.Name+DateToStr(Date));
      FindRes:=FindNext(SR);
   end;
FindClose(SR);
end;


Это сообщение отредактировал(а) Christoph - 28.11.2008, 21:54


--------------------
user posted image
PM MAIL ICQ   Вверх
THandle
Дата 28.11.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Christoph, твой код будет не слабо тупить на папках с большим количеством файлов при обновлении ListBox'а. Тут нужен Begin(End)Update.

Где try..finally?

Почему оформления такое корявое?))
PM   Вверх
Christoph
Дата 28.11.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 5
Всего: 11



Цитата(THandle @ 28.11.2008,  15:27)
Christoph, твой код будет не слабо тупить на папках с большим количеством файлов при обновлении ListBox'а. Тут нужен Begin(End)Update.

Где try..finally?

Почему оформления такое корявое?))

Это кто тебе сказал Rrader?   smile 


--------------------
user posted image
PM MAIL ICQ   Вверх
CodeMonkey
Дата 28.11.2008, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89





--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
THandle
Дата 28.11.2008, 15:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Christoph, ну а ты возьми попробуй свой код и код Rrader'а на папке Windows допустим. Там файлов много. Вот и посмотри на ListBox.

Насчет оформления: разве хорошо оформлено?
Почитай допустим это:

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=802

Насчет try..finally - должно присутствовать при всех освобождениях ресурсов в том числе и FindClose.

А вообще да, я Rrader'а поддерживаю  smile 
PM   Вверх
Poseidon
Дата 28.11.2008, 16:57 (ссылка)  | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(THandle @  28.11.2008,  15:48 Найти цитируемый пост)
Насчет try..finally - должно присутствовать при всех освобождениях ресурсов в том числе и FindClose.
А по-моему try..finally должно присутствовать там, где хотя бы теоритически может возникнуть ошибка. А какая ошибка может возникнуть в приведенном коде? Только Out of memory при создании SR. Но ведь при этом SR и не создасться. try..finally тут лишнее, а вот Begin(End)Update действительно нужен smile

И оформление - это уже дело каждого. Строгих стандартов в оформлении нет. По мне так код сволне читаем.

Это сообщение отредактировал(а) Poseidon - 28.11.2008, 16:59


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
CodeMonkey
Дата 28.11.2008, 17:01 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(Poseidon @  28.11.2008,  16:57 Найти цитируемый пост)
 А какая ошибка может возникнуть в приведенном коде? Только Out of memory при создании SR.

Поручишся? Поддерживаю THandle.

Добавлено через 44 секунды
Цитата(Poseidon @  28.11.2008,  16:57 Найти цитируемый пост)
И оформление - это уже дело каждого.

...за исключением случая, когда работаешь в команде или пишешь для других, как сейчас...


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Martisha
Дата 1.12.2008, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



Christoph, очень странно, при использовании вашего кода выходит совсем не та дата..


Rrader, пробовала использовать ваш старый код, но почему то в ListBox ничего не добавляется..
что означает эта строка? вернее куда добавляется строка S?
Код

 Add(S);

и эта еще: 
Код

with Form1.ListBox1.Items do


Это сообщение отредактировал(а) Martisha - 1.12.2008, 09:04
PM MAIL ICQ   Вверх
Martisha
Дата 1.12.2008, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



почему то когда делаю так:
Код

procedure TForm1.ScanFolderForTxt(Folder: String);
var
  Data: TWin32FindData;
  Res: DWORD;
  SysTime: TSystemTime;
  S: String;
  Date: TDateTime;
begin
  IncludeTrailingPathDelimiter(Folder);
  Res := FindFirstFile(PChar(Folder + '*.txt'), Data);
  if Res <> INVALID_HANDLE_VALUE then
  try
    with Form1.ListBox1.Items do
    begin
      BeginUpdate;
      try
        repeat
          FileTimeToSystemTime(Data.ftCreationTime, SysTime);
          Date := SystemTimeToDateTime(SysTime);
          S := Folder + Data.cFileName + ' (Время создания: ' + DateToStr(Date) + ')';
          Add(S);
        until not FindNextFile(Res, Data);
      finally
        EndUpdate;
      end;
    end;
  finally
    Windows.FindClose(Res);
  end;
end;


procedure TForm1.Button3Click(Sender: TObject);
begin
 ScanFolderForTxt('c:\ROU99STAT');
end;


после выполнения
Код

  if Res <> INVALID_HANDLE_VALUE then

идет сразу в конецпроцедуры..
а если я комментю это выражение, то выводит в ListBox название папки а не файла и дату странную..год вообще нет тот((
почему так?
PM MAIL ICQ   Вверх
aleksh
Дата 1.12.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 1
Всего: 13



попробуй не комментить, а поставить тело цикла, после repeat первой строчкой
PM MAIL   Вверх
CodeMonkey
Дата 1.12.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Код
Folder := IncludeTrailingPathDelimiter(Folder);
?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Martisha
Дата 1.12.2008, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



Цитата(aleksh @  1.12.2008,  11:15 Найти цитируемый пост)
попробуй не комментить, а поставить тело цикла, после repeat первой строчкой 

так ошибки вылазят

Цитата(CodeMonkey @  1.12.2008,  11:34 Найти цитируемый пост)
код Pascal/Delphi
1:

Folder := IncludeTrailingPathDelimiter(Folder);





а так, выдает дату..только она почему то одинаковая для всех записей и совсем даже не та(

Добавлено через 3 минуты и 29 секунд
мне вообще даже не дата важнее а время создания файла, как нибудь возможно время вытащить? часы, минуты там...это важно, как не знаю( дату то я сама могу, а вот часы и минуты не знаю как.. smile 
PM MAIL ICQ   Вверх
aleksh
Дата 1.12.2008, 13:59 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 1
Всего: 13



в справке по типу TDateTime опмано как получать дату, а как время
PM MAIL   Вверх
Rrader
  Дата 1.12.2008, 14:15 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 18
Всего: 191



Цитата(Martisha @  1.12.2008,  19:04 Найти цитируемый пост)
только она почему то одинаковая для всех записей и совсем даже не та(

Проверьте и сравните эту дату с той, что в свойствах файла в проводнике. Должно совпадать.

Цитата(Martisha @  1.12.2008,  19:04 Найти цитируемый пост)
 как нибудь возможно время вытащить?

Код

procedure TForm1.ScanFolderForTxt(Folder: String);
var
  Data: TWin32FindData;
  Res: DWORD;
  SysTime: TSystemTime;
  LocalTime: TFileTime;
  S: String;
  Date: TDateTime;
begin
  Folder := IncludeTrailingPathDelimiter(Folder);
  Res := FindFirstFile(PChar(Folder + '*.txt'), Data);
  if Res <> INVALID_HANDLE_VALUE then
  try
    with Form1.ListBox1.Items do
    begin
      BeginUpdate;
      try
        repeat
          FileTimeToLocalFileTime(Data.ftCreationTime, LocalTime);
          FileTimeToSystemTime(LocalTime, SysTime);
          Date := SystemTimeToDateTime(SysTime);
          S := Folder + Data.cFileName + ' (Время создания: ' + TimeToStr(Date) + ')';
          Add(S);
        until not FindNextFile(Res, Data);
      finally
        EndUpdate;
      end;
    end;
  finally
    Windows.FindClose(Res);
  end;
end;


Это сообщение отредактировал(а) Rrader - 1.12.2008, 14:17


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Martisha
Дата 1.12.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



Rrader, так выводится текущее время, а не время создания папки  smile 

дату я так вывела, причем она выводится отдельно в другом ListBox-е, что удобнее для меня в дальнейшей работе..вот со временем только не понятно.. smile 
вот вывод даты создания папки:
Код

Procedure TForm1.ScanFolder(Dir:string);
Var
 SearchRec:TSearchRec;
begin
 try
  if Dir<>'' then Dir:=IncludeTrailingPathDelimiter(Dir);
  if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
   repeat
      begin
       if AnsiUpperCase(ExtractFileExt(SearchRec.name)) = '.TXT' then
       begin
       EditFile(Dir+SearchRec.name);
       EditTime(DateToStr(FileDateToDateTime(SearchRec.Time)));
       end;
      end;
   until
  FindNext(SearchRec)<>0;
  FindClose(SearchRec);
 finally
 end;
end;

procedure TForm1.EditFile(FileName:string);
begin
  ListBox1.Items.add(filename);
 end;
procedure TForm1.EditTime(filetime:string);
begin
  ListBox3.Items.add(filetime);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 ScanFolder('c:\ROU99STAT');
end;


может что нибудь в моем коде добавить возможно для вывода времени? 
PM MAIL ICQ   Вверх
CodeMonkey
Дата 1.12.2008, 15:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(Martisha @  1.12.2008,  14:47 Найти цитируемый пост)
может что нибудь в моем коде добавить возможно для вывода времени?

DateToStr заменить на TimeToStr



--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Martisha
Дата 1.12.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



Цитата(CodeMonkey @  1.12.2008,  15:00 Найти цитируемый пост)
DateToStr заменить на TimeToStr

 smile точно!!!
пасибки всем)))
вопрос закрыт!  smile  
PM MAIL ICQ   Вверх
CodeMonkey
Дата 1.12.2008, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Почему летнее время не интуитивно.

Добавлено @ 15:20
Цитата(Rrader @  1.12.2008,  14:15 Найти цитируемый пост)
Проверьте и сравните эту дату с той, что в свойствах файла в проводнике. Должно совпадать.

Неа, в первом варианте (как и Christoph) забыл из UTC перевести в местное время.

Добавлено @ 15:24
Цитата(Martisha @  1.12.2008,  15:06 Найти цитируемый пост)
вопрос закрыт!


1. Всё же используйте правильно try/finally:
Код
procedure TForm1.ScanFolder(Dir: String);
var
  SearchRec: TSearchRec;
begin
  if Dir <> '' then
    Dir := IncludeTrailingPathDelimiter(Dir);
  if FindFirst(Dir+'*.*', faAnyFile, SearchRec) = 0 then
  try
    repeat
      ...
    until FindNext(SearchRec) <> 0;
  finally
    FindClose(SearchRec);
  end;
end;


2. SearchRec.Time - это время в формате DOS. Оно имеет низкую точность. Если вы сравните вывод своей программы с тем, что показывает Проводник - то увидите разницу в несколько секунд по времени. Лучше бы вам использовать метку времени записанную в SearchRec.FindData.ftCreationTime - это точное время. 
Код
var
  LocalTime: TFileTime;
  SysTime: TSystemTime;
...
    repeat
       if AnsiUpperCase(ExtractFileExt(SearchRec.name)) = '.TXT' then
       begin
         FileTimeToLocalFileTime(SearchRec.FindData.ftCreationTime, LocalTime);
         FileTimeToSystemTime(LocalTime, SysTime);

         EditFile(Dir+SearchRec.name);
         EditTime(TimeToStr(SystemTimeToDateTime(SysTime)));
       end;     
    until FindNext(SearchRec) <> 0;
...


3. Кроме того, TSearchRec.Time эквивалентно TSearchRec.FindData.ftLastWriteTime - т.е. последней дате модификации, а вовсе не времени создания файла.

Это сообщение отредактировал(а) CodeMonkey - 1.12.2008, 15:52


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Martisha
Дата 1.12.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



CodeMonkey, спасибо, учту  smile 
PM MAIL ICQ   Вверх
Martisha
Дата 1.12.2008, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



Цитата(CodeMonkey @  1.12.2008,  15:09 Найти цитируемый пост)
var
  LocalTime: TFileTime;
Код
  
SysTime: TSystemTime;
...
    repeat
       if AnsiUpperCase(ExtractFileExt(SearchRec.name)) = '.TXT' then
       begin
         FileTimeToLocalFileTime(SearchRec.FindData.ftCreationTime, LocalTime);
         FileTimeToSystemTime(LocalTime, SysTime);

         EditFile(Dir+SearchRec.name);
         EditTime(TimeToStr(SystemTimeToDateTime(SysTime)));
       end;     
    until FindNext(SearchRec) <> 0;

...



и все равно, так выдается не то время(..в принципе разница не существенна, так что пойдет и так!  smile 
PM MAIL ICQ   Вверх
Rrader
  Дата 1.12.2008, 16:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 18
Всего: 191



Цитата(CodeMonkey @  1.12.2008,  21:09 Найти цитируемый пост)
Неа, в первом варианте (как и Christoph) забыл из UTC перевести в местное время.

Блин, точно, и с Folder ошибсяsmile 


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
CodeMonkey
Дата 1.12.2008, 16:17 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(Martisha @  1.12.2008,  15:56 Найти цитируемый пост)
и все равно, так выдается не то время(..в принципе разница не существенна, так что пойдет и так!

А время создания часом не перепутали с временем последней модификации? SearchRec.Time - содержит именно время последней модификации и вы сказали, что этот вариант вас устроил. Но в самом вопросе вы просили время создания, поэтому вам написали с SearchRec.FindData.ftCreationTime - временем создания. 
Если всё же нужно время последней модификации, то берите ftLastWriteTime вместо ftCreationTime (ещё есть ftLastAccessTime - время последнего доступа).

Добавлено через 1 минуту и 12 секунд
Цитата(Martisha @  1.12.2008,  15:56 Найти цитируемый пост)
выдается не то время

Хорошо бы тогда показать, какое время выдаётся, какое вы ожидаете увидеть и почему вы ожидаете увидеть это время (где вы его узнали).


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Martisha
Дата 2.12.2008, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



CodeMonkey, почему то выдается время одинаковое для всех текстовых фалов..но ведь такого же не может быть!

Цитата(CodeMonkey @  1.12.2008,  16:17 Найти цитируемый пост)
Но в самом вопросе вы просили время создания, поэтому вам написали с SearchRec.FindData.ftCreationTime - временем создания. 

наверное я ошиблась в формулировке, но то, что получилось меня устраивает..
Цитата(CodeMonkey @  1.12.2008,  16:17 Найти цитируемый пост)
Если всё же нужно время последней модификации, то берите ftLastWriteTime вместо ftCreationTime 

обязательно попробую)

Добавлено через 6 минут и 7 секунд
CodeMonkey
Цитата(CodeMonkey @  1.12.2008,  16:17 Найти цитируемый пост)
ftLastWriteTime

действительно подошло))  smile 
PM MAIL ICQ   Вверх
Chinese
Дата 2.12.2008, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.12.2008

Репутация: нет
Всего: нет



Уважаемые форумчане помогите чайнику организовать поиск файлов на диске. У меня не получается не один промер который здесь указан. Программа ищет на корне диска, а в каталоги и подкаталоги заходить нехочет помогите чайнику. У меня цель написать программу которая бы отлавиливала расширение Tmp и удаляла его. Помогите пожалуйста.

PM MAIL   Вверх
THandle
Дата 2.12.2008, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Chinesehttp://forum.vingrad.ru/sources/topic-205111.html

Ну и в DRKB примеры должны быть.
PM   Вверх
Chinese
Дата 2.12.2008, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.12.2008

Репутация: нет
Всего: нет



В том то и дело что если ты говоришь *.* То поиск идёт везде, а если ставишь вместо звёздочек скажем  *.TXT то он ищет только накорню,  в каталоги и подкаталоги не глядит.
PM MAIL   Вверх
CodeMonkey
Дата 3.12.2008, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(Chinese @  2.12.2008,  23:50 Найти цитируемый пост)
в каталоги и подкаталоги не глядит

Ну разумеется: расширения-то у каталогов нет. Под такую маску они не подходят.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
THandle
Дата 3.12.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Chinese, вот что то типа такого, с проверкой на расширение. Только соответственно сделай вместо добавления в список удаление файла.
Код


procedure ListFilesInDirectory(Dir: string; const Ext: String; Strings: TStrings);
var
  rSearchRec: TSearchRec;
begin
  if ((Dir = '') or (not Assigned(Strings))) then
    Exit;
  Dir := IncludeTrailingPathDelimiter(Dir);
  if FindFirst(Dir + '*.*', faAnyFile, rSearchRec) = 0 then
    repeat
      if ((rSearchRec.Name <> '.') and (rSearchRec.Name <> '..')) then
        if (rSearchRec.Attr and faDirectory) <> 0 then
          ListFilesInDirectory(Dir + rSearchRec.Name, Ext, Strings)
        else
          if CompareText(ExtractFileExt(rSearchRec.Name), Ext) = 0 then
            Strings.Add(rSearchRec.Name);
    until FindNext(rSearchRec) <> 0;
  FindClose(rSearchRec);
end;

PM   Вверх
Chinese
Дата 5.12.2008, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.12.2008

Репутация: нет
Всего: нет



Цитата

Chinese, вот что то типа такого, с проверкой на расширение. Только соответственно сделай вместо добавления в список удаление файла.код Pascal/Delphi

Я не понял, где здесь проверяется расширение. Пожалуйста обясните как его проверять. пробывал сравнивать rSearchRec.Name с *.tmp, но он ничего не выдавал. Помогите.
PM MAIL   Вверх
THandle
Дата 5.12.2008, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Цитата(Chinese @  5.12.2008,  20:53 Найти цитируемый пост)
Я не понял, где здесь проверяется расширение. 


Цитата(THandle @  3.12.2008,  13:44 Найти цитируемый пост)
if CompareText(ExtractFileExt(rSearchRec.Name), Ext) = 0 then


http://forum.vingrad.ru/faq/topic-212851.html
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.2328 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.