Avatar billede hugopedersen Nybegynder
17. august 2009 - 14:28 Der er 9 kommentarer og
1 løsning

Validere filnavn

Findes der en funktion i Delphi der kan validere om et filnavn er valid?
I mit tilfælde skal den også checke for f.eks. C:\C:\123.txt som bliver noget rigtig rod.
Avatar billede hrc Mester
17. august 2009 - 14:47 #1
http://www.delphifaq.com/faq/delphi/windows_file_system/f418.shtml

Den er ikke perfekt, men jeg kunne ikke finde nogen funktion i SysUtils der gør det for os.
Avatar billede hugopedersen Nybegynder
17. august 2009 - 15:04 #2
Den har jeg også siddet og rodet med, men som du siger er den ikke perfekt.
Avatar billede Slettet bruger
17. august 2009 - 15:16 #3
prøv at oprette filen, midlertidigt! hvis ikke den kan får du en fejl og hvis den kan, sletter du den bare igen
Avatar billede hrc Mester
17. august 2009 - 15:17 #4
Du må nok køre filnavnet gennem et regulært udtryk som dette

"[a-zA-Z\.]\w+(?![/\\])"
FILENAME = r"([a-zA-Z]?[\w./\\]+\.((mls)|(o))" - syntaks er kun tæt på at være korrekt (men der var nogle af kombinationerne der blev konverteret til smileys).

Jeg ved det er indbygget i .NET men ikke om man kan det direkte i VCL. Skal prøve at undersøge det lidt.
Avatar billede hugopedersen Nybegynder
17. august 2009 - 15:32 #5
Jeg har en unit til regular expressions, så det er ikke noget problem (i øvrigt er regular expressions rigtig cool)

Men checker den også for dobbeltforekomster af : ?

jape44 - det er ikke så smart at skulle gøre det på den måde. Det kan jo tænkes at det er en fil der skal appendes til, så at slette den vil være en katastrofelignende action.
Avatar billede hrc Mester
17. august 2009 - 20:27 #6
Der er en masse eksempler her (men reg-ex er desværre ikke uden dialekter): http://regexlib.com/Search.aspx?k=file+name
Avatar billede Slettet bruger
17. august 2009 - 22:35 #7
hugopedersen

Du kan selvfølgelig programmere dig ud af det, og indberegne den tid det tager dig at programmere funktionen, men jeg ser ingen grund til, IKKE at benytte sig af windows API

http://msdn.microsoft.com/en-us/library/aa363858%28VS.85%29.aspx

Dit argument mod at slette en fil holder ikke. Opret en fil (det filnavn) i et eller katalog og se om det holder? Hvis ikke får du en fejl!

Hvis den holder, bliver der oprettet en fil? og så slet den!

Hvorfor genopfinde den dybe tallerken?
Avatar billede arne_v Ekspert
18. august 2009 - 03:19 #8
Hvis du definerer at:
- et ikke eksisterende directory er invalidt
- brugerne ikke har mulighed for at indtaste non-printable tegn
så kan du prøve:

function IsValidFileName(fnm : string) : boolean;

function IsValidShortFileName(fnm : string) : boolean;

const
  Invalid = '<>:"/\|?*';

begin
  IsValidShortFileName := LastDelimiter(Invalid, fnm) = 0;
end;

begin
  IsValidFileName := DirectoryExists(ExtractFilePath(fnm))
                    and IsValidShortFileName(ExtractFileName(fnm));
end;
Avatar billede hugopedersen Nybegynder
18. august 2009 - 15:11 #9
arne_v>  det har den ønskede effekt ser det ud til. Smid et svar.
Avatar billede arne_v Ekspert
18. august 2009 - 15:22 #10
svar
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