gelöst: Dateiname und -Pfad per Regex prüfen

Anfängerfragen zum Programmieren mit PureBasic.
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Re: Dateiname und -Pfad per Regex prüfen

Beitrag von bin_neu_hier »

@ Nino
Sorry, Du hast recht - gelobe Besserung
@ Jacdelad
Das sieht echt gut aus! Vielen Dank!
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: gelöst: Dateiname und -Pfad per Regex prüfen

Beitrag von jacdelad »

Du könntest noch prüfen, ob ein Punkt am Ende ist. Das ist bei meinem Vorschlag noch erlaubt, könnte auch einfach verboten werden
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: gelöst: Dateiname und -Pfad per Regex prüfen

Beitrag von jacdelad »

Ich hab nochmal mit RegEx weiterexperimentiert und das ist dabei rausgekommen:

Code: Alles auswählen

CreateRegularExpression(0,"^(\\\\|[a-zA-Z]\:\\)([^\\\\\/\?\*\:\|<>]+\\)*([^\\\\\/\?\*\:\|<>\r\n\t\f\v]+)+$")
Define NewList Dir.s()
AddElement(Dir())
Dir()="O:\"
Repeat
  dir$=Dir()
  If ExamineDirectory(0,Dir(),"*.*")
    While NextDirectoryEntry(0)
      name$=DirectoryEntryName(0)
      If DirectoryEntryType(0)=#PB_DirectoryEntry_File
        If Not MatchRegularExpression(0,dir$+name$)
          Debug dir$+name$
          count+1
        Else
          gut+1  
        EndIf
      Else
        If ReplaceString(name$,".","")<>""
          AddElement(Dir())
          Dir()=dir$+name$+"\"
        EndIf
      EndIf
    Wend
    FinishDirectory(0)
  EndIf
  FirstElement(Dir())
  DeleteElement(Dir(),#True)
Until ListSize(Dir())=0
Debug "Gut:      "+Str(gut)
Debug "schlecht: "+Str(count)
Es scheint soweit zu funktionieren (für Windows), aber der Punkt am Ende des Dateinamens wird immer noch nicht angemeckert. Vielleicht hat jemand ne Idee.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: gelöst: Dateiname und -Pfad per Regex prüfen

Beitrag von NicTheQuick »

Wenn auch sehr ungewöhnlich, müsste man auch noch prüfen, ob ein Short-Name drin ist. Siehe https://learn.microsoft.com/en-us/windo ... long-names
Und im Bereich Naming Conventions findet man auch noch die Liste an Dateinamen, die man nicht benutzen darf: CON, PRN, AUX, NUL, COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
Und das gilt auch für die Dateinamen, wenn Erweiterungen dran hängen.

Aber ich weiß nicht genau wie weit du damit gehen willst. Es gibt auch maximale Pfadlängen und sowas.
Bild
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: gelöst: Dateiname und -Pfad per Regex prüfen

Beitrag von jacdelad »

NicTheQuick hat geschrieben: 10.05.2023 17:43 Wenn auch sehr ungewöhnlich, müsste man auch noch prüfen, ob ein Short-Name drin ist. Siehe https://learn.microsoft.com/en-us/windo ... long-names
Und im Bereich Naming Conventions findet man auch noch die Liste an Dateinamen, die man nicht benutzen darf: CON, PRN, AUX, NUL, COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
Und das gilt auch für die Dateinamen, wenn Erweiterungen dran hängen.

Aber ich weiß nicht genau wie weit du damit gehen willst. Es gibt auch maximale Pfadlängen und sowas.
Ja, stimmt. Das hatte ich vor und dann vergessen...
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: gelöst: Dateiname und -Pfad per Regex prüfen

Beitrag von jacdelad »

Irgendwie hat's mir jetzt doch keine Ruhe gelassen:
^(?i-)(\\|[a-z]\:)\\([^\\\/\|\:\"\<\>\?\*]*[^\ \.\\\/\|\:\"\<\>\?\*]\\)*[^\\\/\|\:\"\<\>\?\*]*[^\ \.\\\/\|\:\"\<\>\?\*]$
beachtet, dass keine unerlaubten Zeichen drin sind, Namen müssen mindestens ein Zeichen lang sein und dürfen nicht auf Leerzeichen oder Punkt enden. Es funktionieren Laufwerksbuchstaben und Netzwerkpfade. Jetzt fehlen wirklich nur noch die reservierten Namen (NUL, COM1...), die auch nicht in Verbindung mit anderen Dateiendungen und so verwendet werden dürfen. Das hab ich aber noch nicht hingekriegt.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Antworten