В моем веб-сервисе есть следующий код:
string str_uploadpath = Server.MapPath("/UploadBucket/Raw/");
FileStream objfilestream = new FileStream(str_uploadpath +
fileName, FileMode.Create, FileAccess.ReadWrite);
Может ли кто-нибудь помочь мне решить проблему с этим сообщением об ошибке из строки 2 кода.
Формат данного пути не поддерживается.
Разрешение на папку установлено на полный доступ для всех, и это фактический путь к папке.
Точка останова дала мне значение str_uploadpath
as C:\\webprojects\\webservices\\UploadBucket\\Raw\\
.
Что не так с этой строкой?
fileName
?fileName
пусто.Ответы:
Вместо использования
str_uploadpath + fileName
попробуйте использоватьSystem.IO.Path.Combine
:который возвращает строку.
источник
using System.IO;
выше, затем очиститеstr_uploadpath + fileName
и напишитеPath.Combine(str_uploadpath, fileName)
str_uploadpath
. В чем его ценность?Я вижу, что создатель обнаружил, что ошибка произошла при попытке сохранить имя файла с полным путем. На самом деле достаточно иметь
":"
в имени файла, чтобы получить эту ошибку. Если это может быть":"
в имени вашего файла (например, если у вас есть отметка даты в имени файла), убедитесь, что вы заменили их чем-то другим. Т.е.:источник
Path.GetInvalidPathChars
но не такPath.GetInvalidFileNameChars
, как это было со мной.Для меня проблема заключалась в невидимом для человеческого глаза
""
символе встраивания слева направо .Он застрял в начале строки (непосредственно перед 'D') после того, как я скопировал путь из вкладки безопасности свойств файла Windows.
Так что эти, на первый взгляд одинаковые, две линии на самом деле разные.
источник
Если вы пытаетесь сохранить файл в файловой системе. Path.Combine не является пуленепробиваемым, так как он не поможет вам, если имя файла содержит недопустимые символы. Вот метод расширения, который удаляет недопустимые символы из имен файлов:
А использование может быть:
источник
return string.Concat(s.Split(Path.GetInvalidFileNameChars()));
Среди прочего, что может вызвать эту ошибку:
В полной строке PathFile не может быть определенных символов.
Например, эти символы приведут к сбою функции StreamWriter:
могут быть и другие специальные символы, которые тоже вызывают сбой. Я обнаружил, что это происходит, когда вы пытаетесь, например, поставить отметку DateTime в имя файла:
Один из способов предотвратить эту проблему - заменить проблемные символы в NewFileOutS на безопасные:
Надеюсь, это избавит кого-то от головной боли ...!
источник
Если вы получаете эту ошибку в PowerShell, скорее всего, это связано с тем, что вы используете
Resolve-Path
для разрешения удаленного пути, напримерВ этом случае
Resolve-Path
возвращает объект, который при преобразовании в строку не возвращает допустимый путь. Он возвращает внутренний путь PowerShell:Решение состоит в том, чтобы использовать
ProviderPath
свойство объекта, возвращаемогоResolve-Path
:источник
Попробуйте изменить:
Server.MapPath("/UploadBucket/Raw/")
к
Server.MapPath(@"\UploadBucket\Raw\")
источник
MapPath
достаточно умен, чтобы понять это в любом случае.@
который их экранирует.Это была моя проблема, которая может помочь кому-то другому, хотя это не было проблемой OP:
Я определил проблему, указав свой путь к файлу журнала и обнаружив, что он неправильно форматируется. Правильно для меня было довольно просто:
источник
Помогает ли использование метода Path.Combine ? Это более безопасный способ объединения путей к файлам. Может быть, у него проблемы с соединением путей вместе
источник
Я использую (ограниченный) построитель выражений для переменной для использования в простой задаче файловой системы для создания архива файла в SSIS.
Это мой быстрый и грязный прием по удалению двоеточий, чтобы остановить ошибку: @ [User :: LocalFile] + "-" + REPLACE ((DT_STR, 30, 1252) GETDATE (), ":", "-") + ".xml"
источник
Сегодня у меня была такая же проблема. Файл, который я пытался загрузить в свой код, был открыт для редактирования в Excel. После закрытия Excel код заработал!
источник
Если значением является URL-адрес файла, например file: // C: / something, используйте класс Uri для преобразования в обычное имя файла:
var localPath = (new Uri(urlStylePath)).AbsolutePath
В общем, использование предоставленного API - это лучшая практика.
источник