“不支持给定路径的格式。”

我在我的 Web 服务中有以下代码:

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

有人可以帮助我解决这个错误消息的问题从第2行的代码。

不支持给定路径的格式。

对文件夹的权限设置为对所有人的完全访问权限,并且它是文件夹的实际路径。

断点给出的值是 str_uploadpath作为 C:\\webprojects\\webservices\\UploadBucket\\Raw\\

What is wrong with this string?

355257 次浏览

与其使用 str_uploadpath + fileName,不如试着使用 System.IO.Path.Combine:

Path.Combine(str_uploadpath, fileName);

which returns a string.

使用 Path.Combine方法有帮助吗?这是将文件路径连接在一起的更安全的方法。可能是连接路径有问题

试着改变:

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

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

我看到,发起人发现错误发生时,试图保存整个路径的文件名。实际上,在文件名中有一个 ":"就足以得到这个错误。如果您的文件名中可能有 ":"(例如,如果您的文件名中有一个日期戳) ,请确保您将其替换为其他内容。例如:

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

如果您在 PowerShell 中得到这个错误,很可能是因为您正在使用 Resolve-Path解析远程路径,例如。

 Resolve-Path \\server\share\path

在这种情况下,Resolve-Path返回一个对象,该对象在转换为字符串时不返回有效路径。它返回 PowerShell 的内部路径:

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

The solution is to use the ProviderPath property on the object returned by Resolve-Path:

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

Among other things that can cause this error:

不能在完整的 PathFile 字符串中包含某些字符。

例如,这些字符将使 StreamWriter 函数崩溃:

"/"
":"

there may be other special characters that crash it too. 我发现,当您尝试(例如)将一个 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.

希望这能给某些人省点麻烦... !

如果您试图将文件保存到文件系统。路径。如果文件名中包含无效字符,那么组合不能防弹,因为它不会帮助您。下面是一个从文件名中去除无效字符的扩展方法:

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

用法可以是:

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

这是我的问题,也许能帮到其他人——尽管这不是 OP 的问题:

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

我通过将路径输出到日志文件并发现其格式不正确来确定问题。对我来说,正确的答案很简单:

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

如果值是像 file://C:/whatever 这样的文件 URL,那么使用 Uri 类将其转换为常规文件名:

var localPath = (new Uri(urlStylePath)).AbsolutePath

In general, using the provided API is best practice.

我正在使用变量的(有限的)表达式构建块,以便在简单的文件系统任务中使用,从而在 SSIS 中对文件进行归档。

这是我的快速和肮脏的黑客删除冒号停止错误: @ [ User: : LocalFile ] + “-”+ REPLACE ((DT _ STR,30,1252) GETDATE () ,“ :”,“-”) + “ . xml”

For me the problem was an invisible to human eye "‪" 从左到右嵌入 character.
在我从 windows file properties security 选项卡复制粘贴路径之后,它停留在字符串的开头(就在“ D”之前)。

var yourJson = System.IO.File.ReadAllText(@"D:\test\json.txt"); // Works
var yourJson = System.IO.File.ReadAllText(@"‪D:\test\json.txt"); // Error

所以这些,乍一看是一样的,两条线实际上是不同的。

我今天也遇到了同样的问题。 The file I was trying to load into my code was open for editing in Excel. 关闭 Excel 后,代码开始工作!

Image img = Image.FromFile(System.IO.Path.GetFullPath("C:\\ File Address"));

你需要指向类的 getfullpath。我有同样的错误和修正..。