Просто сделайте;
System.IO.FileInfo fi = null;
try {
fi = new System.IO.FileInfo(fileName);
}
catch (ArgumentException) { }
catch (System.IO.PathTooLongException) { }
catch (NotSupportedException) { }
if (ReferenceEquals(fi, null)) {
// file name is not valid
} else {
// file name is valid... May check for existence by calling fi.Exists.
}
Для создания FileInfo
инстанцируют файл, не должен существовать.
Это получит Вас диски на машине:
System.IO.DriveInfo.GetDrives()
Эти два метода заставят Вас неверные символы проверять:
System.IO.Path.GetInvalidFileNameChars();
System.IO.Path.GetInvalidPathChars();
Вероятно, луб путь должен создать пользовательский метод, смешивающий комбинацию regex и небольшого взгляда в Вашей файловой системе (для наблюдения дисков, например)
Я ни о чем не знаю из поля, которое может просто проверить все это для Вас, однако Path
, класс в .NET
может выручить Вас чрезвычайно.
Для начала, это имеет:
char[] invalidChars = Path.GetInvalidFileNameChars(); //returns invalid charachters
или:
Path.GetPathRoot(string); // will return the root.
У меня была удача с помощью регулярных выражений, поскольку другие показали.
Одна вещь иметь в виду состоит в том, что Windows, по крайней мере, запрещает некоторые имена файлов это иначе containlegal символы. Некоторые приходят на ум: com, nul, prn.
у меня нет его со мной теперь, но у меня есть regex, который принимает их имя файла во внимание. Если Вы хотите, я могу отправить его, иначе я уверен, что можно найти это тем же способом, которым я сделал: Google.
- Сойка
Даже если имя файла допустимо, можно все еще хотеть к touch
оно быть уверенными, что у пользователя есть разрешение записать.
, Если Вы не будете перегружать диск с сотнями файлов в короткий промежуток времени, я думаю, создавая пустой файл, разумный подход.
, Если Вы действительно хотите что-то легче, как просто проверка недопустимые символы, затем сравнивают Ваше имя файла с Путем. GetInvalidFileNameChars ().
Используйте помехи GetInvalidFileNameChars
метод на Path
класс в System.IO
пространство имен для определения, какие символы являются запрещенными в имени файла.
, Чтобы сделать так в пути, назовите помехи GetInvalidPathChars
метод на том же классе.
, Чтобы определить, допустим ли корень пути, Вы назвали бы помехи GetPathRoot
метод на Path
класс, чтобы получить корень, затем использовать Directory
класс , чтобы определить, допустимо ли это. Затем можно проверить остальную часть пути обычно.
Можно получить список недопустимых символов от Путь. GetInvalidPathChars и GetInvalidFileNameChars, как обсуждено в этот вопрос.
, Как отмечено jberger, там некоторые другие символы, которые не включены в ответ из этого метода. Для намного большего количества деталей платформы окон смотрите на Файлы Именования, Пути и Пространства имен на MSDN,
, Как Micah указывает , существует Каталог. GetLogicalDrives для получения списка допустимых дисков.
Существует несколько методов, которые Вы могли использовать, которые существуют в System.IO
пространство имен:
Directory.GetLogicalDrives() // Returns an array of strings like "c:\"
Path.GetInvalidFileNameChars() // Returns an array of characters that cannot be used in a file name
Path.GetInvalidPathChars() // Returns an array of characters that cannot be used in a path.
, Как предложено Вы могли затем сделать это:
bool IsValidFilename(string testName) {
string regexString = "[" + Regex.Escape(Path.GetInvalidPathChars()) + "]";
Regex containsABadCharacter = new Regex(regexString);
if (containsABadCharacter.IsMatch(testName)) {
return false;
}
// Check for drive
string pathRoot = Path.GetPathRoot(testName);
if (Directory.GetLogicalDrives().Contains(pathRoot)) {
// etc
}
// other checks for UNC, drive-path format, etc
return true;
}
Несколько из Системы. Методы IO.Path выдадут исключения, если путь или имя файла будут недопустимы:
http://msdn.microsoft.com/en-us/library/system.io.path_methods.aspx