Avatar billede janbb Juniormester
22. juni 2006 - 11:50 Der er 8 kommentarer og
1 løsning

get filesize

Gad vidst - spekulerer på:
er det muligt at et program checker filstørrelsen på en fil beliggende i samme dir som programmet og skiver filstøørelsen - evt checker ved en knap tryk på om filstørrelsen er blevet ændret.
Måske lidt dårligt forklaret men ....
Avatar billede martinlind Nybegynder
22. juni 2006 - 12:45 #1
ja da
Avatar billede janbb Juniormester
22. juni 2006 - 12:56 #2
Tænkte jeg nok :) men hvordan ? Kan huske fra Pascal- tiderne at man kunne udskruve dir og den slags, men hvis man nu leder efter en spec. fil fx den databasefil man arbejder med i programmet.
Alternativt kan man måske 'trylle' det frem i en memo ?.
Har gemt en lille programstump jeg fandt engang til filnavnelistning:
unit listfilimemo;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Memo1: TMemo;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

var
  SR: TSearchRec;
begin
  Memo1.Lines.Clear;
  if FindFirst(Edit1.Text + '\*.*', faAnyFile, SR) = 0 then
    while FindNext(SR) = 0 do
    begin
      if (SR.Name <> '.') and (SR.Name <> '..') then
      begin
        Memo1.Lines.Add(SR.Name);
      end;
   
end;
end;

end.


Kan man bruge den til noget 'mere' ?.
Avatar billede janbb Juniormester
22. juni 2006 - 13:47 #3
Hjælpen omkr. seachrec giver ikke så meget - på mit niveau.
TSearchRec defines file information searched for by FindFirst or FindNext.

Unit

Sysutils

type
TSearchRec = record
       
Time: Integer;       
Size: Integer;   
Attr: Integer;   
Name: TFileName;       
ExcludeAttr: Integer;       
FindHandle: THandle;       
FindData: TWin32FindData;
end;
Men det synes da som muligt som du antyder martinlind, men det er
sikkert langtfra så let som man måske skulle tro.
Vil gerne forhøje pointsene til 100.
Avatar billede janbb Juniormester
22. juni 2006 - 14:47 #4
Det her er lidt håbløst pt (mangler at genopfriske mine kundskaber om omdannelse af tal til tekststrene og osse hvordan man adderer strengene) men tankegangen må da være noget i retning af:
procedure TForm1.Button1Click(Sender: TObject);

var
  SR: TSearchRec;
  streng:string;
begin
  Memo1.Lines.Clear;
  if FindFirst(Edit1.Text + '\*.*', faAnyFile, SR) = 0 then
    while FindNext(SR) = 0 do
    begin
      if (SR.Name <> '.') and (SR.Name <> '..') then
      begin
      streng:=str(SR.size,streng);
        Memo1.Lines.Add(SR.Name)+(streng);
      end;

Er der ikke nogen der lige kan justere de dumme fejl - selvom det sikkert er upædagogisk :)
Avatar billede janbb Juniormester
22. juni 2006 - 14:55 #5
Proceduren findfirst skal vel køres separat mht SR.Size ? monstro
Men problemet med at hente filnavnet ind kan let løses ved at placere filen i et sep bibl så det er faktisk 'bare' lige at kunne sjonglere lidt med de strenge der masngler.
Avatar billede tolderlund Nybegynder
22. juni 2006 - 14:56 #6
Der er 3 oplagte fejl i begge løsninger.
1. Der er en leak, fordi FindClose ikke kaldes til sidst.
2. Der overspringes en fil (directory-entry) pga FindNext lige efter FindFirst.
3. Der er ingen fejlhåndtering.
Det skal altid kodes efter følgende skabelon:
  if FindFirst(Edit1.Text + '\*.*', faAnyFile, SR) = 0 then
  try
    repeat
      { arbejd med SR her }
      if (SR.Name <> '.') and (SR.Name <> '..') then
      begin
        Memo1.Lines.Add(SR.Name + ' ' + IntToStr(SR.size));
      end;
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
Husket efter hukommelsen, så der tages forbehold for syntaksfejl.
Avatar billede janbb Juniormester
22. juni 2006 - 15:01 #7
Tak.Det prøver jeg lige
Avatar billede janbb Juniormester
23. juni 2006 - 12:17 #8
Det virker upåklageligt.Smid et svar tolderlund - og tak igen.
Avatar billede tolderlund Nybegynder
23. juni 2006 - 14:50 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester