.NET StringBuilder и дословный строковый литерал

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

string file_path = @"D:\Intranet\Students\DailyMarks\";

Также есть StringBuilder, который генерирует имя файла на основе некоторого идентификатора и D ateTime:

... sb.Append(document.Type); sb.Append(document.Id); sb.Append(DateTime.Now.ToShortString());

И наконец я делаю следующее

file_path + sb.toString();

Но мое приложение ловит исключение. После сеанса отладки я вижу, что на самом деле мой file_path

file_path = "D:\\Intranet\\Students\\DailyMarks\\...";

Насколько я понимаю, это происходит после конкатенации исходного файла с помощью вызова toString() StringBuilder. Я попытался заменить строку file_path чем-то вроде этого:

file_path = file_path.Replace(@"\\",@"\");

но это не работает Где я сделал не так?

3 ответа

Решение

Вероятно, это связано с DateTime.Now.ToShortString() метод, который добавляет запрещенные символы в путь (:).

Это совершенно нормально.

"D:\\Intranet\\Students\\DailyMarks\\..." == @"D:\Intranet\Students\DailyMarks\..."

В обычной строке вам нужно избегать косой черты, дословно это делается автоматически

Еще одна похожая ситуация, с которой я столкнулся сегодня, касалась отправки японского colon : 」(двоеточие с целым внутри) в качестве элемента имени файла, и это сработало. Интересно, почему русская толстая кишка называет исключением, а японская нет. Очень интересно.

Другие вопросы по тегам