Yalnızca dosya adınızı / yolunuzu tutan bir dizenin geçersiz karakterleri olup olmadığını kontrol etmeye çalışıyorsanız, bulduğum en hızlı yöntem Split()
, dosya adını geçersiz bir karakterin olduğu yerlerde bir parça dizisine ayırmak için kullanmaktır . Sonuç yalnızca 1 diziyse, geçersiz karakter yoktur. :-)
var nameToTest = "Best file name \"ever\".txt";
bool isInvalidName = nameToTest.Split(System.IO.Path.GetInvalidFileNameChars()).Length > 1;
var pathToTest = "C:\\My Folder <secrets>\\";
bool isInvalidPath = pathToTest.Split(System.IO.Path.GetInvalidPathChars()).Length > 1;
Bu ve LinqPad bir dosya / yol adı 1.000.000 kez yukarıda belirtilen diğer yöntemleri çalışmayı denedim.
Kullanmak Split()
sadece ~ 850ms.
Kullanımı Regex("[" + Regex.Escape(new string(System.IO.Path.GetInvalidPathChars())) + "]")
yaklaşık 6 saniyedir.
Daha karmaşık düzenli ifadeler, Path
dosya adını almak ve dahili doğrulamalarının işi yapmasına izin vermek için sınıftaki çeşitli yöntemleri kullanmak gibi (diğer olasılıkla istisna işleme yükü nedeniyle) diğer seçeneklerin bazıları gibi, çok daha kötüdür .
1 milyon dosya adını doğrulamanız gerekmediği için, bu yöntemlerin çoğu için yine de tek bir yineleme iyidir. Ancak, yalnızca geçersiz karakterler arıyorsanız, yine de oldukça verimli ve etkilidir.