2

これらの文字を string.Empty に置き換えたい:'"<>?*/\| 指定されたファイル名で 正規表現を使用してそれを行う方法 私はこれを試しました:

Regex r = new Regex("(?:[^a-z0-9.]|(?<=['\"]))", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled);
                 FileName = r.Replace(FileName, String.Empty);

ただし、これによりすべての特殊文字が String.Empty に置き換えられます。

4

2 に答える 2

5

Regex.Replaceメソッドを使用できます。それはその名前が示唆することをします。

Regex regex = new Regex(@"[\\'\\""\\<\\>\\?\\*\\/\\\\\|]");
var filename = "dfgdfg'\"<>?*/\\|dfdf";
filename = regex.Replace(filename, string.Empty);

ただし、何かを忘れた可能性があるために正規表現で定義した文字だけでなく、現在使用しているファイルシステムのファイル名で禁止されているすべての文字をサニタイズしたいと思います。

private static readonly char[] InvalidfilenameCharacters = Path.GetInvalidFileNameChars();

public static string SanitizeFileName(string filename)
{
    return new string(
        filename
            .Where(x => !InvalidfilenameCharacters.Contains(x))
            .ToArray()
    );
}

その後:

var filename = SanitizeFileName("dfgdfg'\"<>?*/\\|dfdf");
于 2012-08-23T09:59:47.760 に答える
2

ここでそれを行う方法を見てください:

パスとファイル名から不正な文字を削除するには?

Path.GetInvalidFileNameChars() を使用することを忘れないでください

于 2012-08-23T10:09:52.230 に答える