如何使用非法名称保存文件

时间:2012-03-29 15:35:47

标签: c#

以下是我创建文件的方式:

System.IO.File.Create(Server.MapPath("..") + name + ".html");

但有时名字有来自瑞典字母表的非法字符,如å。如何保存?它可以直接使用,但是当我使用代码时会出错。

2 个答案:

答案 0 :(得分:3)

如果路径是用户控制的并且可能包含无效的文件系统字符,那么您需要让用户更改名称或以确定的方式规范化坏字符。一种方法是用say下划线替换所有无效字符。

public static string NormalizeFileName(string input) {
  var invalid = Path.GetInvalidPathChars();
  var builder = new System.Text.StringBuilder();
  foreach(char c in input) {
    if (invalid.Contains(c)) {
      builder.Append('_');
    } else {
      builder.Append(c);
    }
  }
  return builder.ToString();
}

然后您可以按如下方式使用此功能

var originalName = Server.MapPath("..") + name + ".html";
var normalizedName = NormalizeFileName(originalName);
System.IO.File.Create(normalizedName);

修改

正如一些人所指出的,最好在这里使用Path.Combine来组合目录和文件名。

var originalName = Path.Combine(Server.MapPath(".."), name + ".html");

答案 1 :(得分:0)

System.IO.File.Create(Server.MapPath("..") + "\\" + name + ".html");