2012-10-02 11 views
6

Muszę sprawdzić nazwę folderu w języku C#.Sprawdzanie poprawności nazwy folderu w języku C#

Próbowałem następujące wyrażenia regularnego:

^(.*?/|.*?\\)?([^\./|^\.\\]+)(?:\.([^\\]*)|)$ 

ale nie powiedzie się i próbowałem również używając GetInvalidPathChars().

To nie przy próbie korzystania P:\abc jako nazwa folderu t j Driveletter:\foldername

Może ktoś sugerują, dlaczego?

+0

dzięki czemu pismo regex napęd validate + NazwaFolderu –

+0

Pytanie: W jakiej sytuacji jest użytkownik będzie musiał ręcznie wpisać ścieżkę tak specyficzny trzeba go regex? – Amicable

+0

W systemie Windows niektóre "nazwy urządzeń" są również zastrzeżone, np. "COM1" lub "AUX" –

Odpowiedz

9

Można to zrobić w ten sposób (za pomocą System.IO.Path.InvalidPathChars stała):

bool IsValidFilename(string testName) 
{ 
    Regex containsABadCharacter = new Regex("[" + Regex.Escape(System.IO.Path.InvalidPathChars) + "]"); 
    if (containsABadCharacter.IsMatch(testName) { return false; }; 

    // other checks for UNC, drive-path format, etc 

    return true; 
} 

[edytuj]
Jeśli chcesz wyrażenia regularnego, które sprawdza ścieżkę folderu, a następnie można użyć tego jednego:

Regex regex = new Regex("^([a-zA-Z]:)?(\\\\[^<>:\"/\\\\|?*]+)+\\\\?$");

[edycja 2]
ja pamiętał jedną trudną rzeczą, która pozwala sprawdzić, czy ścieżka jest poprawna:

var invalidPathChars = Path.GetInvalidPathChars(path)

lub (dla plików):

var invalidFileNameChars = Path.GetInvalidFileNameChars(fileName)

+0

to nie działa, ponieważ bierze pod uwagę literę dysku –

+0

. Czy chcesz, aby 'P: \ nazwa_folderu' była poprawną nazwą folderu ? – Nickon

+0

tak, to się nie udaje. Wyrażenie nie działa –

0

sprawdzania poprawności nazwy folderu może być poprawnie spora misja. Zobacz mój wpis na blogu: Taking data binding, validation and MVVM to the next level - part 2.
Nie daj się zwieść tytułem, chodzi o sprawdzanie poprawności ścieżek systemu plików i ilustruje niektóre złożoności związane z używaniem metod dostępnych w ramach .Net. Chociaż możesz użyć wyrażenia regularnego, nie jest to najbardziej niezawodny sposób wykonania zadania.

-1

to regex należy użyć:

Regex regex = new Regex("^([a-zA-Z0-9][^*/><?\"|:]*)$"); 
if (!regex.IsMatch(txtFolderName.Text)) 
{ 
    MessageBox.Show(this, "Folder fail", "info", MessageBoxButtons.OK, MessageBoxIcon.Information); 
    metrotxtFolderName.Focus(); 
} 
Powiązane problemy