Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2016, 10:09   #1
Primkray
Новичок
Джуниор
 
Регистрация: 09.03.2016
Сообщений: 9
По умолчанию Размер файла он-лайн

У меня программа пишет данные в файл. Я хочу определять изменение размера этого файла и выводить постоянно обновляемым списком. Делаю так, по таймеру каждые 5 сек определяю размер файла посредством FindFirstFile, вывожу результат в listbox. Данные в listbox выводятся, но не меняются, т.е. такое чувство, что программа один раз получила размер файла и выводит не обновляя. Но стоит мне обновить информацию в каталоге, в котором лежит файл, программа получает обновленную информацию о файле и снова выводит один и тот-же размер. Подскажите, в чем проблема и что можно сделать?

Код программы
Код:
function GetFileSize(FileName:string): Int64;
var
  InfoFile: _WIN32_FIND_DATAA;

begin
  Result :=0;
    if  FileExists(FileName) then
    begin
            FindFirstFile(PChar(FileName),InfoFile);
            Result :=InfoFile.nFileSizeHigh shl 32 + InfoFile.nFileSizeLow;
    end
end;



procedure TForm1.tmr1Timer(Sender: TObject);
  var
  Fss1: Real;
begin

  Fss1:=0;
  Fss1:=GetFileSize('C:\11.mp3');
  Form1.mmo1.Lines.Add(FloatToStr(Fss1);

end;
Primkray вне форума Ответить с цитированием
Старый 09.03.2016, 10:30   #2
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 272
По умолчанию

Код:
function GetFileSize(const FileName: TFileName): Integer;
var
  SearchRec: TSearchRec;
begin
  Result := 0;
  if FindFirst(Filename, faAnyFile and not faDirectory, SearchRec) = 0 then
  begin
    Result := SearchRec.Size;
    FindClose(SearchRec);
  end;
end;
Код:
procedure TForm1.tmr1Timer(Sender: TObject);
  var
  Fss1: Integer;
begin

  Fss1:=GetFileSize('C:\11.mp3');
  Form1.mmo1.Lines.Add(IntToStr(Fss1);

end;
Filka вне форума Ответить с цитированием
Старый 09.03.2016, 10:49   #3
Primkray
Новичок
Джуниор
 
Регистрация: 09.03.2016
Сообщений: 9
По умолчанию

Спасибо за быстрый ответ, но все равно информация о размере файла не меняется пока не обновлю каталог с файлом.
Primkray вне форума Ответить с цитированием
Старый 09.03.2016, 11:02   #4
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

А если сделать выбор дирректории?
Код:
ChDir('C:\');
Iron Monk вне форума Ответить с цитированием
Старый 09.03.2016, 11:09   #5
Primkray
Новичок
Джуниор
 
Регистрация: 09.03.2016
Сообщений: 9
По умолчанию

Не помог выбор дирректории
Primkray вне форума Ответить с цитированием
Старый 09.03.2016, 11:17   #6
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Не могу воспроизвести ошибку - у меня размер файлов изменяется.
Iron Monk вне форума Ответить с цитированием
Старый 09.03.2016, 11:20   #7
Primkray
Новичок
Джуниор
 
Регистрация: 09.03.2016
Сообщений: 9
По умолчанию

Без ChDir изменяется? У меня на 2 компах такое, пока не обновлю каталог или просто не кликну по файлу изменения не проходят.
Primkray вне форума Ответить с цитированием
Старый 09.03.2016, 11:28   #8
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Только код с поста №2.
Iron Monk вне форума Ответить с цитированием
Старый 09.03.2016, 11:30   #9
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 272
По умолчанию

Код:
function GetFileSize(const FileName: TFileName): Int64;
var
  FindHandle: THandle;
  FindData: TWin32FindData;
begin
  Result := -1;
  FindHandle:= FindFirstFile(PChar(FileName), FindData);
  if FindHandle <> INVALID_HANDLE_VALUE then
  begin
    Int64Rec(Result).Lo := FindData.nFileSizeLow;
    Int64Rec(Result).Hi := FindData.nFileSizeHigh;
    Windows.FindClose(FindHandle);
  end;
end;
Код:
procedure TForm1.tmr1Timer(Sender: TObject);
var
  Fss1: Int64;
begin
  Fss1 := GetFileSize('C:\11.mp3');
  if Fss1 <> -1 then
    Form1.mmo1.Lines.Add(IntToStr(Fss1);
end;
?
Filka вне форума Ответить с цитированием
Старый 09.03.2016, 11:49   #10
Primkray
Новичок
Джуниор
 
Регистрация: 09.03.2016
Сообщений: 9
По умолчанию

Filka, попробовал, ситуация не изменилась.
Primkray вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Размер файла саша40 Общие вопросы Delphi 2 17.10.2012 17:20
размер файла iliili Общие вопросы Delphi 4 22.06.2011 13:28
Размер файла flug Общие вопросы Delphi 2 29.10.2009 13:43
Размер файла Naposaram PHP 2 08.02.2009 11:54
размер файла мандарин Общие вопросы Delphi 4 06.05.2007 17:22