Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    93

    [vb.net] Verificare un file name

    Volevo sapere se c'e' un modo veloce per verificare se una stringa possa essere un nome di file, in pratica sapere che non contenga caratteri non ammessi.

    Ho visto che c'e' la possibilita' di ottenere una stringa con tutti i caratteri non ammessi con Path.GetInvalidFileNameChars() ma in quel caso mi tocca passare con un for tutta la stringa per vedere se contiene ognuno di quei caratteri. Esiste un'alternativa?

    Grazie

  2. #2
    regular expression

  3. #3
    Sono d'accordo. Ho sperimentato questo pattern, che sembra andaer bene:
    codice:
    Dim File As New Regex("^\w:(\\[^\\\*\?\|\<\>""/:,]+(\.\w*)?)+$")
    Dim N As String = "Prova a mettere un qualsiasi nome di file, sbagliato o giusto che sia"
    
    'E controlla se è valido:
    If File.IsMatch(N) Then
      MessageBox.Show("Valido!")
    End If

  4. #4
    Occhio alle faccine.
    codice:
    Dim File As New Regex("^\w:(\\[^\\\*\?\|\<\>""/:,]+(\.\w*)?)+$")
    Dim N As String = "Prova a mettere un qualsiasi nome di file, sbagliato o giusto che sia"
    
    'E controlla se è valido:
    If File.IsMatch(N) Then
      MessageBox.Show("Valido!")
    End If
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    93
    Grazie ho preso spunto dal tuo codice e ho modificato la stringa perche' a me non interessava il full path ma il nome file e basta.

    Cmq ho imparato qualcosa che nemmeno sapevo esistesse, a tal pro, io venendo dalla vecchia scuola quella che si scriveva tutto visto che una volta non esistevano ste cose ma solo pochi comandi, mi chiedo: ma nel mio caso che devo solo controllare se esistono solo 8 caratteri nel nome del file faccio bene ad usare tale cosa? od era meglio in quanto a velocita' e memoria utilizzare un bel for per cercare questi 8 caratteri nella stringa?

  6. #6
    Be', se devi controllare solo il nome del file c'è un metodo più efficiente e anche più semplice:
    codice:
    Dim nomeFile As String
    nomeFile = "<il nome del tuo file>"
    If nomeFile.IndexOfAny(Path.GetInvalidFileNameChars()) Then
        'il nome del file non è valido
    Else
        'il nome del file è valido
    End If
    . Il metodo IndexOfAny di fatto effettua internamente il for di cui parli, ma è più veloce perché è scritto in codice nativo unsafe e (probabilmente) opera direttamente sul buffer di caratteri, senza passare per metodi wrapper.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    93
    Si in questo caso molto meglio cosi' a parte un paio di correzioni:

    codice:
    Dim nomeFile As String
    nomeFile = "<il nome del tuo file>"
    If nomeFile.IndexOfAny(":*?/\|<>""") <> -1 Then
        'il nome del file non è valido
    Else
        'il nome del file è valido
    End If
    Primo perche' IndexOfAny riporta -1 quindi volendo true, solo se non trova i caratteri. Sarebbe bastato invertire le scritte then else ma mi fido di piu' cosi'
    Secondo cosa strana e' che Path.GetInvalidFileNameChars() riporta solo "<>| scordandosi altri caratteri che in un nome del file non sono consentiti.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.