使用服务器文件的路径时,何时需要使用反斜杠或正斜杠(单斜杠或双斜杠)

本文关键字:单斜杠 文件 服务器 路径 何时需 | 更新日期: 2023-09-27 17:56:37

关于以下代码示例:

string baseLocation = HttpContext.Current.Server.MapPath("/");
const string templateName = @"//temp//ExportTemplate.xlsx";
const string generatedLocation = @"{0}//temp//{1}";
var fileName = string.Format("Export-{0}.xlsx", DateTime.Now.Date.ToString("yyyy-MM-dd"));
var newFile = String.Format(generatedLocation, baseLocation, fileName);
File.Copy(baseLocation + templateName, newFile, true);

我们在生产服务器和本地开发环境(通过 IIS 中的站点)上使用它。两者都运行 IIS 7.5。该代码在生产环境中正常工作,但在本地开发中抛出错误:

Access to the path 'C:'Path'To'Site'//temp//Export-2013-01-29.xlsx' is denied.

该文件是在本地开发上正确创建/复制的,但我猜由于路径中的斜杠不正确,它出错了。应用池标识对"临时"文件夹具有完全访问权限。

这就引出了几个问题:

  • 在这种情况下,"//"对路径有什么作用?我知道"''"是转义反斜杠的方法,但"//"没有意义。
  • 两个环境的配置是否存在差异,使生成的路径在生产服务器上正常工作,但在本地开发中失败?

使用服务器文件的路径时,何时需要使用反斜杠或正斜杠(单斜杠或双斜杠)

代码应该使用 '',而不是/作为文件路径。也

const string templateName = @"'temp'ExportTemplate.xlsx";

const string templateName = "''temp''ExportTemplate.xlsx";

会正常工作。令人惊讶的是,当前版本的代码在生产中工作,这可能是由于Windows被构建为允许在文件路径中使用正斜杠或反斜杠。(这可以追溯到DOS时代,当时许多用户也是UNIX用户)

此外,我建议使用Path.Combine,而不仅仅是连接文件路径的字符串(这将有助于避免在路径中获得额外的斜杠或正斜杠,如"C:''Path''To''Site''''temp''Export-2013-01-29.xlsx")。 例如:

File.Copy(Path.Combine(baseLocation, templateName), newFile, true);
//

总是会给你//...在字符串处使用 @,它是一个逐字字符串文字,您不需要转义字符。因此,您可以使用 '' 来获取 。 如果删除 @,则需要使用 '' 来获取 。 使用文件路径时,它始终是反斜杠()。 使用 URL 路径时,它始终是正斜杠 (/)