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: 404
Registriert: 03.02.2021 13:39
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
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
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.
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

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.
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
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...
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
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.
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Antworten