.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 : 」(двоеточие с целым внутри) в качестве элемента имени файла, и это сработало. Интересно, почему русская толстая кишка называет исключением, а японская нет. Очень интересно.