";给定的路径';不支持s格式&”;

本文关键字:不支持 格式 quot 路径 | 更新日期: 2023-09-27 18:08:03

我的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''

这根绳子怎么了?

";给定的路径';不支持s格式&”;

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

Path.Combine(str_uploadpath, fileName);

其返回字符串。

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

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

对我来说,问题是人眼看不见的"‪"从左到右嵌入字符
它卡在字符串的开头(就在"D"之前(,在我从windows文件属性安全选项卡复制粘贴路径之后

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

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

如果您正试图将文件保存到文件系统中。路径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());

在其他可能导致此错误的因素中:

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

例如,这些字符将使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.

希望这能让人省心。。。!

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

 Resolve-Path ''server'share'path

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

> [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

尝试更改:

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

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

这是我的问题,可能会帮助其他人——尽管这不是OP的问题:

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

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

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

使用Path。组合方法帮助?这是将文件路径连接在一起的一种更安全的方式。这可能是因为它在将路径连接在一起时遇到了问题

我今天遇到了同样的问题。我试图加载到代码中的文件已打开,可在Excel中进行编辑。关闭Excel后,代码开始工作!

我正在使用一个变量的(有限的(表达式生成器,用于一个简单的文件系统任务,以在SSIS中归档文件。

这是我快速而肮脏的破解,删除冒号以停止错误:@[用户::LocalFile]+"-"+REPLACE((DT_STR,301252(GETDATE((,":","-"(+".xml">

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

您需要通过pointed类获取完整路径。我也犯了同样的错误并修复了。。。

如果值是类似file://C:/whatever的文件url,则使用Uri类转换为常规文件名:

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

一般来说,使用提供的API是最佳实践。