“给定path的格式不被支持。”
我在Web服务上提供了以下代码行:
string str_uploadpath = Server.MapPath("/UploadBucket/Raw/"); FileStream objfilestream = new FileStream(str_uploadpath + fileName, FileMode.Create, FileAccess.ReadWrite);
有人可以帮我解决这个错误信息从第二行的代码。
给定path的格式不被支持。
文件夹上的权限设置为完全访问所有人,这是文件夹的实际path。 断点给了我str_uploadpath
值为C:\\webprojects\\webservices\\UploadBucket\\Raw\\
。
这个string有什么问题,我看不到。
而不是使用str_uploadpath + fileName
,而是尝试使用System.IO.Path.Combine
:
Path.Combine(str_uploadpath, fileName);
它返回一个string。
我发现原始发现者试图用整个path保存文件名时发生错误。 实际上,在文件名中有一个":"
就可以得到这个错误。 如果文件名中可能存在":"
(例如,如果文件名中有date标记),请确保将其replace为其他内容。 即:
string fullFileName = fileName.Split('.')[0] + "(" + DateTime.Now.ToString().Replace(':', '-') + ")." + fileName.Split('.')[1];
如果您正尝试将文件保存到文件系统。 Path.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());
除此之外,可能会导致此错误:
完整的PathFilestring中不能包含某些字符。
例如,这些字符将崩溃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
防止这种麻烦的一种方法是用良性的方法replaceNewFileOutS中的问题字符:
' 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.
希望这可以节省一些人头痛…!
如果你在PowerShell中出现这个错误,很可能是因为你正在使用Resolve-Path
来parsing一个远程path,例如
Resolve-Path \\server\share\path
在这种情况下, Resolve-Path
将返回一个对象,该对象在转换为string时不会返回有效的path。 它返回PowerShell的内部path:
> [string](Resolve-Path \\server\share\path) Microsoft.PowerShell.Core\FileSystem::\\server\share\path
解决方法是在由Resolve-Path
返回的对象上使用ProviderPath
属性:
> Resolve-Path \\server\share\path | Select-Object -ExpandProperty PRoviderPath \\server\share\path > (Resolve-Path \\server\share\path).ProviderPath \\server\share\path
使用Path.Combine方法有帮助吗? 将文件path连接起来是一种更安全的方式。 这可能是因为将path连接在一起时遇到问题
尝试改变:
Server.MapPath("/UploadBucket/Raw/")
至
Server.MapPath(@"\UploadBucket\Raw\")
这是我的问题,这可能会帮助别人 – 虽然这不是OP的问题:
DirectoryInfo diTemp = new DirectoryInfo(strSomePath); FileStream fsTemp = new FileStream(diTemp.ToString());
我通过输出我的path到日志文件,并find它不正确的格式来确定问题。 对我来说很简单:
DirectoryInfo diTemp = new DirectoryInfo(strSomePath); FileStream fsTemp = new FileStream(diTemp.FullName.ToString());