“给定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());