"Формат данного пути не поддерживается."



у меня есть следующий код в мой веб-сервиса:



string str_uploadpath = Server.MapPath("/UploadBucket/Raw/");
FileStream objfilestream = new FileStream(str_uploadpath +
fileName, FileMode.Create, FileAccess.ReadWrite);


может кто-нибудь помочь мне решить проблему с этим сообщением об ошибке из строки 2 кода.




формат данного пути не поддерживается.




разрешение на папку установлено на полный доступ ко всем, и это фактический путь к папке.



точка останова дала мне значение str_uploadpath как C:webprojectswebservicesUploadBucketRaw.



что в этом плохого струна?

888   8  

8 ответов:

вместо str_uploadpath + fileName, попробуйте использовать System.IO.Path.Combine вместо:

Path.Combine(str_uploadpath, fileName);

который возвращает строку.

Я вижу, что создатель обнаружил, что ошибка произошла при попытке сохранить имя файла со всем путем. На самом деле достаточно иметь ":" в имя файла, чтобы получить эту ошибку. Если там может быть ":" в имени файла (например, если у вас есть штамп даты в имени файла) убедитесь, что вы замените их чем-то другим. Т. е.:

string fullFileName = fileName.Split('.')[0] + "(" + DateTime.Now.ToString().Replace(':', '-') + ")." + fileName.Split('.')[1];

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

public static string ToSafeFileName(this string s)
{
        return s
            .Replace("\", "")
            .Replace("/", "")
            .Replace("\"", "")
            .Replace("*", "")
            .Replace(":", "")
            .Replace("?", "")
            .Replace("<", "")
            .Replace(">", "")
            .Replace("|", "");
    }

и использование может быть:

Path.Combine(str_uploadpath, fileName.ToSafeFileName());

среди прочего, что может вызвать эту ошибку:

вы не можете иметь определенные символы в полной строке файла пути.

например, эти символы будут аварийно завершать работу функции StreamWriter:

"/"  
":"

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

AppPath = Path.GetDirectoryName(giFileNames(0))  
' AppPath is a valid path from system. (This was easy in VB6, just AppPath = App.Path & "\")
' AppPath must have "\" char at the end...

DateTime = DateAndTime.Now.ToString ' fails StreamWriter... has ":" characters
FileOut = "Data_Summary_" & DateTime & ".dat"
NewFileOutS = Path.Combine(AppPath, FileOut)
Using sw As StreamWriter = New StreamWriter(NewFileOutS  , True) ' true to append
        sw.WriteLine(NewFileOutS)
        sw.Dispose()
    End Using

один из способов предотвратить эту проблему-заменить проблемные символы в NewFileOutS с доброкачественными:

' clean the File output file string NewFileOutS so StreamWriter will work
 NewFileOutS = NewFileOutS.Replace("/","-") ' replace / with -
 NewFileOutS = NewFileOutS.Replace(":","-") ' replace : with - 

' after cleaning the FileNamePath string NewFileOutS, StreamWriter will not throw an (Unhandled) exception.

надеюсь, это спасет кого-то от головной боли...!

попробуйте изменить:

Server.MapPath("/UploadBucket/Raw/")

до

Server.MapPath(@"\UploadBucket\Raw\")

если вы получаете эту ошибку в PowerShell, это, скорее всего, потому, что вы используете Resolve-Path для разрешения удаленного пути, например

 Resolve-Path \server\share\path

в этом случае Resolve-Path возвращает объект, который при преобразовании в строку, не возвращает правильный путь. Он возвращает внутренний путь PowerShell:

> [string](Resolve-Path \server\share\path)
Microsoft.PowerShell.Core\FileSystem::\server\share\path

решение заключается в использовании ProviderPath свойство объекта, возвращаемого Resolve-Path:

> Resolve-Path \server\share\path | Select-Object -ExpandProperty PRoviderPath
\server\share\path
> (Resolve-Path \server\share\path).ProviderPath
\server\share\path

Это была моя проблема, которая может помочь кому-то еще-хотя это не было проблемой ОП:

DirectoryInfo diTemp = new DirectoryInfo(strSomePath);
FileStream fsTemp = new FileStream(diTemp.ToString());

Я определил проблему, выведя свой путь к файлу журнала и обнаружив, что он не форматируется правильно. Исправить для меня было довольно просто:

DirectoryInfo diTemp = new DirectoryInfo(strSomePath);
FileStream fsTemp = new FileStream(diTemp.FullName.ToString());

не с помощью путь.Комбайн способ помочь? Это более безопасный способ объединения путей к файлам вместе. Может быть, у него проблемы с соединением путей вместе

Comments

    Ничего не найдено.