Seite 2 von 4

Verfasst: 05.11.2006 00:08
von AND51
Eine Struktur, die korrekt gefüllt ist, \pfad enthält den kompletten Pfad+Dateinamen. Der Ruckgabewert von DeleteFile() wird durch If abgefangen und ausgewertet. Wenn erfolgreich, wird die Linkedlist zu dem Index geblättert, der im nächsten Eintrag des ListIconGadgets steht.

Code: Alles auswählen

		While CountGadgetItems(#suchergebnis)
			ChangeCurrentElement(suchergebnisse(), GetGadgetItemData(#suchergebnis, n))
			With suchergebnisse()
				lade("Lösche: ")
				status(\pfad)
				If DeleteFile(\pfad)
					RemoveGadgetItem(#suchergebnis, n)
				Else
					n+1
				EndIf
				
			EndWith
			scan_abbrech_moeglichkeit()
		Wend

Verfasst: 05.11.2006 00:14
von ts-soft
Wenn Du "While CountGadgetItems(#suchergebnis) " verwendest und Items
löscht, ist es kein Wunder, wenns invalide gibt :mrgreen:
Nimm eine ForEach Schleife. Wußte doch, das es mit DeleteFile nichts (bzw.
nur Indirekt zu tun hat)

Verfasst: 05.11.2006 00:32
von AND51
Ich suche bestimmte Dateien. Sie werden in einem ListIconGadget absteigend dargestellt. Gleichzeitig wird in einer LinkedList dieselbe Dateiliste aufsteigend sortiert:

Code: Alles auswählen

ListIcon - LinkedList
5 - 1
4 - 2
3 - 3
2 - 4
1 - 5
Ich arbeite gegenwärtig das ListIcon von oben ab; kann die Datei gelöscht werden, wird das erste Element des ListIconGadgets gelöscht. Kann die Datei nicht gelöscht werden, soll der Eintrag im ListIconGadget erhalten bleiben. DIe LinkedList wird in jedem Fall weitergeblättert.

Später soll man die LinkedList per Klick auf den Header sortieren können. Außerdem kann man schon jetzt mehrere Einträge des ListIcons anklicken, nur diese Dateien sollen dann gelöscht werden. Um mir merken zu können, welcher Entrag des Gadgets zu welche Eintrag der Liste gehört, speichere ich den Pointer des Eintrags der Liste als ItemData mit dem Eintrag im Gadget.


@ TS-Sof: Wie soll ich denn dann eine ForEach Schleife nehmen und die Zusammengehörigkeit unter Berücksichtigung der möglichen Sortierung des ListIcons? Und wie erklärst du dir, dass folgendes funktioniert hat bei mir:
Ich habe einfach DeleteFile(\pfad) durch DeleteDirectory(GetPathPart(\pfad), GetFilePart(\pfad), #PB_FileSystem_Force) ersetzt. Ging it derselben WhileSchleife, wie oben.

Verfasst: 05.11.2006 00:48
von ts-soft
Dann ist das Ergebnis vielleicht ein Pfad und keine Datei. Auf jedenfall steckt
der Fehler in Deinem Code. Mach doch mal nur DeleteFile mit einer schreibgeschützen Datei.
Hab auch keine Lust über nicht lauffähigen Code auch nur Nachzudenken, das
ist zwecklos. Wenn Du nicht in der Lage bist, den Code lauffähig auf ein
erträgliches Maß zu kürzen, kann Dir keiner helfen. Solange sitzt der Bug
vorm PC

Verfasst: 05.11.2006 01:02
von AND51
Danke, werde es morgen testen und Bricht erstatten.

Verfasst: 05.11.2006 13:50
von AND51
Bericht: Es funktioniert, bin auf ForEach umgestiegen und habe es anders gelöst, dass ich weiterhin weiß, welcher Eintrag aus der Liste zu welchem Eintrag aus dem gadget stammt.

Das Programm stürzt zwar nicht ab, trotzdem löscht er schreibgeschützte Dateien nicht.

Verfasst: 05.11.2006 15:51
von ts-soft
>> trotzdem löscht er schreibgeschützte Dateien nicht.
So sollte es sein und ist es vorgesehen :mrgreen:

Verfasst: 05.11.2006 17:42
von AND51
Also liegt ier definitiv kein Bug vor?
Angenommen, ich will C:\test.bmp löschen, warum nehme ich dann nicht einfach DeleteFile("C:\", "test.bmp", #PB_FileSystem_Force)? Bei dieser Möglihckeit wird aber leider das Verzeichnis an sich mitgelöscht, sofern keine anderen Dateien im Verzeichnis verbleiben.

Ich glaube, ich gebe mit geschlagen und lasse die bereits eingebaute Meldung "Nicht löschbar, da scheibgeschützt" drin. Zur Not kann ich ja immer noch ein anderen Lösch-Algo benutzen...

... :? ...

Ich habe gerade so eine typische TS-Soft-Idee: Warum setze ich nicht manuell vor dem Löschen das Dateiattribut von #PB_FileSystem_ReadOnly auf #PB_FileSystem_Normal? Yeha! ich bin ein Genie!!! >:)

Verfasst: 05.11.2006 17:49
von ts-soft
Vielleicht machste es so, wie es sein sollte? Bei löschen nicht möglich prüfen
ob ReadOnly gesetzt und dann den User Fragen. Erst danach evtl. reagieren.

Alles andere kannste zwar machen, aber weitergeben solltest Du es nicht, da
werde ich stinksauer wenn ReadOnly Dateien ohne Nachfrage gelöscht
werden, egal wer oder was die erstellt hat.

Verfasst: 05.11.2006 18:24
von a14xerus
vll soplltest du einfach die dateiattribute vorm löschen aus #normal ändern?