В проверке C#, что имя файла *возможно* допустимо (не, что это существует) [дубликат]

122
задан will-hart 1 August 2014 в 13:43
поделиться

10 ответов

Просто сделайте;

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 инстанцируют файл, не должен существовать.

91
ответ дан 24 November 2019 в 01:25
поделиться

Это получит Вас диски на машине:

System.IO.DriveInfo.GetDrives()

Эти два метода заставят Вас неверные символы проверять:

System.IO.Path.GetInvalidFileNameChars();
System.IO.Path.GetInvalidPathChars();
0
ответ дан 24 November 2019 в 01:25
поделиться

Вероятно, луб путь должен создать пользовательский метод, смешивающий комбинацию regex и небольшого взгляда в Вашей файловой системе (для наблюдения дисков, например)

0
ответ дан 24 November 2019 в 01:25
поделиться

Я ни о чем не знаю из поля, которое может просто проверить все это для Вас, однако Path, класс в .NET может выручить Вас чрезвычайно.

Для начала, это имеет:

char[] invalidChars = Path.GetInvalidFileNameChars(); //returns invalid charachters

или:

Path.GetPathRoot(string); // will return the root.
1
ответ дан 24 November 2019 в 01:25
поделиться

У меня была удача с помощью регулярных выражений, поскольку другие показали.

Одна вещь иметь в виду состоит в том, что Windows, по крайней мере, запрещает некоторые имена файлов это иначе containlegal символы. Некоторые приходят на ум: com, nul, prn.

у меня нет его со мной теперь, но у меня есть regex, который принимает их имя файла во внимание. Если Вы хотите, я могу отправить его, иначе я уверен, что можно найти это тем же способом, которым я сделал: Google.

- Сойка

1
ответ дан 24 November 2019 в 01:25
поделиться

Даже если имя файла допустимо, можно все еще хотеть к touch оно быть уверенными, что у пользователя есть разрешение записать.

, Если Вы не будете перегружать диск с сотнями файлов в короткий промежуток времени, я думаю, создавая пустой файл, разумный подход.

, Если Вы действительно хотите что-то легче, как просто проверка недопустимые символы, затем сравнивают Ваше имя файла с Путем. GetInvalidFileNameChars ().

5
ответ дан 24 November 2019 в 01:25
поделиться

Используйте помехи GetInvalidFileNameChars метод на Path класс в System.IO пространство имен для определения, какие символы являются запрещенными в имени файла.

, Чтобы сделать так в пути, назовите помехи GetInvalidPathChars метод на том же классе.

, Чтобы определить, допустим ли корень пути, Вы назвали бы помехи GetPathRoot метод на Path класс, чтобы получить корень, затем использовать Directory класс , чтобы определить, допустимо ли это. Затем можно проверить остальную часть пути обычно.

2
ответ дан 24 November 2019 в 01:25
поделиться

Можно получить список недопустимых символов от Путь. GetInvalidPathChars и GetInvalidFileNameChars, как обсуждено в этот вопрос.

, Как отмечено jberger, там некоторые другие символы, которые не включены в ответ из этого метода. Для намного большего количества деталей платформы окон смотрите на Файлы Именования, Пути и Пространства имен на MSDN,

, Как Micah указывает , существует Каталог. GetLogicalDrives для получения списка допустимых дисков.

34
ответ дан 24 November 2019 в 01:25
поделиться

Существует несколько методов, которые Вы могли использовать, которые существуют в 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;
}
9
ответ дан 24 November 2019 в 01:25
поделиться

Несколько из Системы. Методы IO.Path выдадут исключения, если путь или имя файла будут недопустимы:

  • Путь. IsPathRooted ()
  • Путь. GetFileName ()

http://msdn.microsoft.com/en-us/library/system.io.path_methods.aspx

2
ответ дан 24 November 2019 в 01:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: