2014-10-26 3 views
-1

Я создал этот метод:Почему я получаю NotSupportedException: формат данного пути не поддерживается?

private string GetDirectoryName(string baseString, string baseName, int startAt) 
{ 
      int i = startAt; 

      while (Directory.Exists(Path.Combine(baseString, baseName + i.ToString("D6")+"_"+DateTime.Now))) 
      { 
       i++; 
      } 
      return Path.Combine(baseString, baseName + i.ToString("D6") + "_" + DateTime.Now); 
} 

Я добавил DateTime.Now в оригинале метод был так:

private string GetDirectoryName(string baseString, string baseName, int startAt) 
{ 
      int i = startAt; 

      while (Directory.Exists(Path.Combine(baseString, baseName + i.ToString("D6")))) 
      { 
       i++; 
      } 

      return Path.Combine(baseString, baseName + i.ToString("D6")); 
} 

Затем я создаю каталог, если это необходимо:

string eventDir = GetDirectoryName(AnimatedGifDirectory, "Rain event ", 1); 

if (!Directory.Exists(eventDir)) 
{ 
    Directory.CreateDirectory(eventDir); 
} 

Перед использованием DateTime.Now он работал нормально, но после добавления DateTime.Now я получаю исключение.

Это пример для каталога, которые дают исключение, например eventDir содержат:

C:\test\Rain event 000001_10/26/2014 8:09:12 AM 

Имя каталога метод создан именно эта часть:

Rain event 000001_10/26/2014 8:09:12 AM 

Возможно пространства после 2014 8 и 12 в AM, проблема? Может быть, имя каталога должно быть что-то вроде:

Rain event 000001_10/26/2014_8:09:12_AM ? 

То, что я хочу делать то, что вместо того, чтобы только создать каталоги, как дождь события 000001 и дождь события 000002 и дождь события 000003 то, что даст каждое событие и идентификатор, так что это МЕРОПРИЯТИЕ.

Так что, возможно, каким-либо образом добавить дату и время. Что-то вроде того. Таким образом, каталоги по-прежнему будут событием дождя 000001, но с его идентификатором даты и времени.

ответ

2

Ваше использование DateTime приводит к незаконным символам для имени каталога, в качестве альтернативы вы можете использовать DateTime.Now.ToFileTime(), который представляет собой числовое представление текущего времени (не обязательно уникальное, если вы делаете это одновременно или в цикле).

4

Это символ :, это незаконный символ пути в ОС Windows. См. MSDN.

Вы также можете вызвать метод Path.GetInvalidPathChars, чтобы узнать, является ли символ недопустимым в строке пути.

1

В документации MSDN для Directory.CreateDirectory возникает исключение NotSupportedException, если имя каталога содержит двоеточие, которое не является частью метки диска. Когда вы включаете DateTime, вы включаете двоеточие в имя каталога.

0
\/: * ? " < > | 

Все перечисленные недопустимы в имени файла.

Смежные вопросы