"不支持给定路径的格式."

All*_*ond 95 .net c# upload webforms stream

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

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

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

不支持给定路径的格式.

文件夹的权限设置为对每个人的完全访问权限,它是文件夹的实际路径.

断点给了我str_uploadpathas 的价值C:\\webprojects\\webservices\\UploadBucket\\Raw\\.

这个字符串有什么问题?

小智 115

而不是使用str_uploadpath + fileName,尝试使用System.IO.Path.Combine:

Path.Combine(str_uploadpath, fileName);
Run Code Online (Sandbox Code Playgroud)

返回一个字符串.

  • @All Blonde将`使用System.IO;`放在上面,然后清除`str_uploadpath + fileName`并写入`Path.Combine(str_uploadpath,fileName)` (2认同)

Dan*_*röm 44

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

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

  • 谢谢!这就是为什么发布多个答案总是一个好主意. (4认同)
  • 这解决了我一直在使用我的文件名的问题.我将当前日期和时间附加到我的文件中,并且":"值导致我的程序抛出引用的错误OP. (2认同)

Thi*_*PXP 20

如果您尝试将文件保存到文件系统.Path.Combine不是防弹,因为如果文件名包含无效字符,它将无法帮助您.这是一个从文件名中删除无效字符的扩展方法:

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

用法可以是:

Path.Combine(str_uploadpath, fileName.ToSafeFileName());
Run Code Online (Sandbox Code Playgroud)


Ole*_*hko 16

对我来说,问题是肉眼看不见的"?" 左右嵌入字符。
在我从Windows文件属性“安全性”选项卡复制粘贴路径之后,它停留在字符串的开头(恰好在“ D”之前)。

var yourJson = System.IO.File.ReadAllText(@"D:\test\json.txt"); // Works
var yourJson = System.IO.File.ReadAllText(@"?D:\test\json.txt"); // Error
Run Code Online (Sandbox Code Playgroud)

因此,乍一看相同,但实际上两条线是不同的。


小智 7

除其他可能导致此错误的事项:

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

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

"/"  
":"
Run Code Online (Sandbox Code Playgroud)

可能还有其他特殊字符也会崩溃.我发现当你尝试将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
Run Code Online (Sandbox Code Playgroud)

防止此问题的一种方法是使用良性问题替换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.
Run Code Online (Sandbox Code Playgroud)

希望这可以为某些人带来一些麻烦......!