👋 Nový obsah na borekb.cz

Info Tento blog je v "read-only módu" a nový obsah již nebude přibývat. O vývoji píšu na DevBlog.

Validace cesty k souboru

Dělám aplikaci, kde uživatel zadává cestu k jednomu nebo více souborům a současně může v názvu použít * jako wildcard character. Potřeboval jsem nějakým způsobem validovat, že uživatel zadává smysluplný řetězec ve formátu „C:\cesta\k\sou­boru.txt;C:\ji­na\cesta\s*mas­kou.txt“. Jak na to?

.NET žádné extra metody na validaci cest nemá. File.Exists() vrátí false nejen při neplatné cestě, ale i tehdy, když je cesta syntakticky zcela v pořádku, jen neexistuje cílový soubor. Tudy proto cesta nevede.

Pro validaci jednoho souboru lze úspěšně použít malou fintu využívající mechanismus výjimek:

try {
  validPath = Path.GetFullPath(pathToValidate);
}
catch (Exception) {
  // path is not valid
  // you can catch many different exceptions - see
  // MSDN documentation to GetFullPath() method
}

Pro dříve uvedené zadání však .NET žádnou jednoduchou metodu nenabízí. Nejlepším řešením je proto regulární výraz:

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

Po úvodním „C:\“ se může několikrát opakovat „část_cesty\“ (povoleny jsou všechny znaky kromě \ / : * ? " < > |) a celý vzor nakonec končí „jménem*soubo­ru.txt“ (hvězdička je tentokár povolena). Celý tento vzor se může opakovat i víckrát, přičemž jednotlivé instance jsou odděleny středníkem.

Pro jednoduchou validaci by to mělo stačit, kdo touží po opravdu hardcore regulárním výrazu, může použít chuťovku z RegExLib.com.

Zařazeno do kategorií |

Komentáře jsou uzavřeny (blog je v read-only módu). Pokud mě chcete kontaktovat, můžete mailem.