C# 在C中的Path.GetInvalidFileNameChars()中插入我自己的非法字符#

C# 在C中的Path.GetInvalidFileNameChars()中插入我自己的非法字符#,c#,.net,extension-methods,C#,.net,Extension Methods,如何扩展路径.GetInvalidFileNameChars以包含我自己的一组在我的应用程序中非法的字符 string invalid = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars()); 如果我想将“&”添加为非法字符,可以这样做吗?尝试以下操作: var invalid = Path.GetInvalidFileNameChars().Concat(new [] { '&

如何扩展路径.GetInvalidFileNameChars以包含我自己的一组在我的应用程序中非法的字符

string invalid = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
如果我想将“&”添加为非法字符,可以这样做吗?

尝试以下操作:

var invalid = Path.GetInvalidFileNameChars().Concat(new [] { '&' });
这将生成一个包含所有无效字符的
IEnumerable
,包括您的字符

以下是一个完整的示例:

using System.IO;
using System.Linq;

class Program
{
    static void Main()
    {
        // This is the sequence of characters
        var invalid = Path.GetInvalidFileNameChars().Concat(new[] { '&' });
        // If you want them as an array you can do this
        var invalid2 = invalid.ToArray();
        // If you want them as a string you can do this
        var invalid3 = new string(invalid.ToArray());
    }
}

不能修改现有函数,但可以编写一个包装函数,返回
Path.GetInvalidFileNameChars()
和非法字符

public static string GetInvalidFileNameChars() {
    return Path.GetInvalidFileNameChars().Concat(MY_INVALID_FILENAME_CHARS);
}

在这里,扩展方法是最好的选择

public static class Extensions
{
    public static char[] GetApplicationInvalidChars(this char[] input)
    {
        //Your list of invalid characters goes below.
        var invalidChars = new [] { '%', '#', 't' };
        return String.Concat(input, invalidChars).ToCharArray();
    }
}
然后按如下方式使用:

string invalid=Path.GetInvalidFileNameChars().GetApplicationInvalidChars()


它会将无效字符连接到其中已有的字符。

首先创建一个助手类“SanitizeFileName.cs”

typeof(Path).GetField("InvalidFileNameChars", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, new[] { 'o', 'v', 'e', 'r', '9', '0', '0', '0' });
然后,像这样使用它:

var validFileName = SanitizeFileName.ReplaceInvalidFileNameChars(filename, '_');
在我的例子中,我必须用c#download方法清理响应标题中“内容沉积”上的“文件名”

Response.AddHeader("Content-Disposition", "attachment;filename=" + validFileName);

以下内容似乎有效:新字符串('&',1),但我不明白int-ocurses的含义是什么?“char出现的次数”?字符串构造函数接受char和int,允许您创建由重复指定次数的char组成的字符串。例如,
new String('x',5)
给出了“xxxxx”如何将其合并到这个中:String invalid=new String(Path.GetInvalidFileNameChars())+new String(Path.GetInvalidPathChars())+1,因为它很聪明,但是如果我在生产代码中发现类似的东西,我会炸掉垫圈:)我不敢相信人们会投票支持它。并不是说它不聪明——它是聪明的;但如果我看到一个程序员在生产代码中这样做,我会大声诅咒,把他的工作提交给每日WTF,然后运行。很快,投赞成票的人这么做主要是因为他们有幽默感。当然,在Ruby中,这一点也会得到更广泛的接受——这主要是因为对这种元编程的语言支持(这里看到的vs框架支持)。当然,这不是一个Ruby问题,但即使你看不到学习在另一个世界中如何以及为什么这样做是有价值的,它至少暗示了反思(没有一个答案这么做),这是一件值得熟悉的事情(如果没有其他原因,只是知道这不是一个好的用途)。
Response.AddHeader("Content-Disposition", "attachment;filename=" + validFileName);