Solved

File Size

Posted on 1998-12-31
11
368 Views
Last Modified: 2010-04-04
How can I find the file size of an image file and display the size in say a Label Caption?
I am using a FileListBox to click on to Open the File.
Using Delphi4.
Have tried the function in the help section but hangs up when trying to open a file previously opened.
0
Comment
Question by:xpher
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 5
11 Comments
 
LVL 1

Author Comment

by:xpher
ID: 1353910
Edited text of question
0
 
LVL 20

Accepted Solution

by:
Madshi earned 50 total points
ID: 1353911
Hi xpher,

function fio_GetFileSize(const FileName: string) : int64;
var Handle   : THandle;
    FindData : TWin32FindData;
begin
  Handle:=FindFirstFile(PChar(FileName),FindData);
  if Handle<>INVALID_HANDLE_VALUE then begin
    Windows.FindClose(Handle);
    if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY)=0 then begin
      result:=(int64(FindData.nFileSizeHigh) shl 32)+int64(FindData.nFileSizeLow);
      exit;
    end;
  end;
  result:=-1;
end;

Regards, Madshi.

Hmm. On the other side: Why is the file still open? You should check this, because it's not very clean to leave a file open for a long time...
0
 
LVL 1

Author Comment

by:xpher
ID: 1353912
Thanks Madshi it works great. Only problem now is to try and understand it.
I think my original problem was that I was naive enough to think that clicking on another file would automatically close down the other. I'll have to investigate how to close the image before opening another.

Thanks again
Chris:))

ps Happy New Year
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 20

Expert Comment

by:Madshi
ID: 1353913
Happy new year...  :-)

Hmm. How do you open the image files? Perhaps I can then tell you how to close them again...

Regards, Madshi.
0
 
LVL 1

Author Comment

by:xpher
ID: 1353914
Hi Madshi
Thanks for comment.

I open the image files by clicking on the file name in the file list box.

procedure TForm1.FileListBox1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile(FileListBox1.Filename);
end;

This all works fine until I try the function for file size shown in Delphi help as mentioned earlier.

Many thanks for helping. Look forward to a reply.

Regards
Chris :))
0
 
LVL 20

Expert Comment

by:Madshi
ID: 1353915
Hi Chris,

hmmm. I don't understand it. Here's the source from Delphi4, that is called when you call Image1.Picture.LoadFromFile. It should be the same code with Delphi2/3:

procedure TGraphic.LoadFromFile(const Filename: string);
var
  Stream: TStream;
begin
  Stream := TFileStream.Create(Filename, fmOpenRead or fmShareDenyWrite);
  try
    LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

So with "Stream.Free" the file is properly closed again. So I really don't understand why you've had problems with the other filesize function.
Could you please (1) tell me the name of the other function and (2) try to call it before loading the image? Does it work, then?

Regards, Madshi.
0
 
LVL 1

Author Comment

by:xpher
ID: 1353916
Hi Madshi
Thanks for comment.

I open the image files by clicking on the file name in the file list box.

procedure TForm1.FileListBox1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile(FileListBox1.Filename);
end;

This all works fine until I try the function for file size shown in Delphi help as mentioned earlier.

Many thanks for helping. Look forward to a reply.

Regards
Chris :))
0
 
LVL 1

Author Comment

by:xpher
ID: 1353917
Hi Madshi
Thanks for comment.

I open the image files by clicking on the file name in the file list box.

procedure TForm1.FileListBox1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile(FileListBox1.Filename);
end;

This all works fine until I try the function for file size shown in Delphi help as mentioned earlier.

Many thanks for helping. Look forward to a reply.

Regards
Chris :))
0
 
LVL 20

Expert Comment

by:Madshi
ID: 1353918
Hmmm. Are you stuttering?    :-)
0
 
LVL 1

Author Comment

by:xpher
ID: 1353919
oops! don't know what happened seems to have posted comments again sorry. ignore last two.

In response to your last comment, the function name I was trying to use was FileSize. In the help section it gives FileSize, Seek, FilePos Example. I had tried butchering this to just use file size. I've now tried again and realised that I forgot the last line to close the file.

This is what I have ended up with (from D4 help) and it works now placing FileSize into a Label Caption:

procedure TForm1.FileListClick(Sender: TObject);
  var
   f: file of Byte;
   size : Longint;
   S: string;

 begin
     AssignFile(f, FileList.FileName);
     Reset(f);
     size := FileSize(f);
     S := 'File size in bytes: ' + IntToStr(size);
     Seek(f,size div 2);
     CloseFile(f);
 begin
   Image1.Picture.LoadFromFile(FIleList.Filename);
   Label1.Caption := s;
   end;
 end;

 Many thanks for all your help and getting me to think. Hope to communicate again.

Cheers
Chris :-))
0
 
LVL 20

Expert Comment

by:Madshi
ID: 1353920
:-)

See you...

Regards, Madshi.
0

Featured Post

[Live Webinar] The Cloud Skills Gap

As Cloud technologies come of age, business leaders grapple with the impact it has on their team's skills and the gap associated with the use of a cloud platform.

Join experts from 451 Research and Concerto Cloud Services on July 27th where we will examine fact and fiction.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
Michael from AdRem Software outlines event notifications and Automatic Corrective Actions in network monitoring. Automatic Corrective Actions are scripts, which can automatically run upon discovery of a certain undesirable condition in your network.…
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…
Suggested Courses
Course of the Month8 days, 5 hours left to enroll

617 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question