Avatar billede Slettet bruger
21. marts 2007 - 22:03 Der er 13 kommentarer og
1 løsning

Slet text fil i listbox og i biblioteket

Hvis jeg har en item i en listbox ved jeg godt hvordan den slettes fra listbox

ListBox1.Items.Delete(ListBox1.ItemIndex);

hvis nu navnet er skib.txt i listbox

hvordan sletter jeg selve skib.txt filen ?
Avatar billede a_nor Nybegynder
22. marts 2007 - 00:44 #1
var f:file;
begin
  assignfile(f,'skib.txt');
  erase(f);
end;


Men det var ærgeligt du ikke indså løsningen i dit sidste spørgsmål :-))
Avatar billede kroning Nybegynder
22. marts 2007 - 08:07 #2
Man kunne også benytte funktionen DeleteFile

DeleteFile('skib.txt');
Avatar billede kroning Nybegynder
22. marts 2007 - 08:08 #3
Eller:
DeleteFile(ListBox1.Items(ListBox1.ItemIndex));
Avatar billede Slettet bruger
22. marts 2007 - 08:22 #4
nor

nu kan der forekomme flere items i listbox med andre navne end skib som skal slettes
Avatar billede a_nor Nybegynder
22. marts 2007 - 09:32 #5
Ja, og derfor bør du selvfølgelig også omringe sletningen af en Try Except End struktur, men du spurgte om 'skib.txt'

assignfile(f,FilNavnVar)
try
  erase(f)
except
  messagebox(0,tFileRec(f).name,pchar('Ukendt fil !'),IdOK);
end;

Eller

if not DeleteFile(ListBox1.Items(ListBox1.ItemIndex)) then
  ..
  ..

hvis altså listboxen indeholder (hele) filenamet, hvilket vel ikke er så pænt.
Avatar billede Slettet bruger
22. marts 2007 - 13:59 #6
nor
De andre filnavne i listbox skal også være muligt at slette og ikke kun 'skib.txt'

din sidste kommentar går på at beskytte de andre mod sletning så kun 'skib' bliver slettet...

eller er jeg helt ude i hampen SS
Avatar billede a_nor Nybegynder
22. marts 2007 - 14:26 #7
Hvis FilNavnVar er

var FilNavnVar : String[80];

kan den selvfølgelig indeholde 'Skib.txt' eller alle mulige andre strenge, og også navne på allerede slettede filer eller måske noget helt tredie. Altså - prop dit filnavn ind i FilNavnVar og udfør sætningerne som vist.

Hvis man forsøger at slette en fil der ikke findes, gives en IOFejl.
IOFejl kan reagere på enten med Try Except End som vist ovenfor eller ved
sætte copiler directiver omkring:
{$i-}
erase(f);
{$i+}  // og så spørge på funktionen IOResult:
if IOResult<>0 then
  messagebox...  // filen kunne ikke slettes
Avatar billede Slettet bruger
22. marts 2007 - 20:25 #8
nor

det virker fint

var f:file;
begin
assignfile(f,'skib.txt');
try
  erase(f)
except
  messagebox(0,tFileRec(f).name,pchar('Ukendt fil !'),IdOK);
end;
end;

nu er jeg ikke interesseret i at sætte f til en fast streng værdi men en variabel værdi af alle de navne der er i listbox.

Det hjælper ikke at sætte skib.txt i f , når der kan være andre tekstfiler i listbox som alb.txt, app.txt, ve.txt - osv

de tekstfiler skal man kunne slette enkeltvis f.eks ved dbclick
Avatar billede a_nor Nybegynder
23. marts 2007 - 07:13 #9
Så udskift 'skib.txt' med ListBox1.Items[ListBox1.ItemIndex], således:

var f:file;
begin
assignfile(f,ListBox1.Items[ListBox1.ItemIndex]);
try
  erase(f)
except
  messagebox(0,tFileRec(f).name,pchar('Ukendt fil !'),IdOK);
end;
end;


ELLER:

var f:file;
    FilVarNavn: string[80];
begin
FilVarNavn := ListBox1.Items[ListBox1.ItemIndex];
// her kunne du jo så justere på FilVarNavn, f.eks sætte "path'et" foran
assignfile(f,FilVarNavn);
($i-}
erase(f)
($i+}
if IOReslt<>0 then
  messagebox(0,tFileRec(f).name,pchar('Ukendt fil !'),IdOK);
end;
Avatar billede Slettet bruger
23. marts 2007 - 13:59 #10
jeg puslet lidt med din kommentar a_NOR

var f:file;
    i:integer;
begin
for i := 0 to listbox1.Items.Count - 1 do
assignfile(f,ListBox1.Items[ListBox1.ItemIndex]);
listbox1.Clear;
try
  erase(f)
except
  messagebox(0,tFileRec(f).name,pchar('Ukendt fil !'),IdOK);
end;
end;

er det ok på den måde? den virker fint
Avatar billede a_nor Nybegynder
24. marts 2007 - 00:12 #11
Hvis du har flere linier i listboxen er det kun den sidste linie hørende fil der slettes.

Hvis du vil have alle filer slettet skal der lige byttes en anelse rundt:
var f:file;
    i:integer;
begin
for i := 0 to listbox1.Items.Count - 1 do
  begin
  assignfile(f,ListBox1.Items[ListBox1.ItemIndex]);
  try
      erase(f)
  except
      messagebox(0,tFileRec(f).name,pchar('Ukendt fil !'),IdOK);
  end;
  end;
listbox1.Clear;
end;
Avatar billede a_nor Nybegynder
24. marts 2007 - 00:21 #12
Du skal iøvrigt være varsom med at slette linier fra toppen og ned ved anvendelse af Itemindex. Når du har slettet første linie rykker de efterfølgende jo een op og i-et tælles fortsat op. Så er det bedre at bruger
  For i:= Count-1 downto 0 do

Nu løb du ikke ind i problemet fordi du slettede ALLE linier: Listbox1.clear.
Avatar billede Slettet bruger
24. marts 2007 - 01:21 #13
ok takker a_nor.....

Lige et sidste problem med listbox

click på tomt område i listbox giver en "listindex out of bounds(-1)"
Avatar billede a_nor Nybegynder
24. marts 2007 - 02:23 #14
Hvis du klikker på tomt område har du ikke valgt nogen items, og index sættes så til -1, som det også er anført i din fejlmeddelelse. Indexet går fra 0 til count-1.
Det er derfor en god ide, de steder man bruger itemindex, at teste for om dette er indenfor grænserne.
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

IT-JOB