DeleteFile() versagt ... [Fehlalarm]

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Danke, werde es morgen testen und Bricht erstatten.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> trotzdem löscht er schreibgeschützte Dateien nicht.
So sollte es sein und ist es vorgesehen :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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!!! >:)
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

vll soplltest du einfach die dateiattribute vorm löschen aus #normal ändern?
Gesperrt