2010-12-30 23 views

Antwort

2

Sie können eine vorhandene Funktion nicht ändern, aber Sie können eine Wrapper-Funktion schreiben, die Path.GetInvalidFileNameChars()und Ihre ungültige Zeichen zurückgibt.

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

Die folgende scheint zu funktionieren: new String ('&', 1) aber ich verstehe nicht, was int auftritt, bedeutet? "Die Häufigkeit, mit der ein Zeichen auftritt"? – Rod

+0

Der Zeichenfolgenkonstruktor, der ein char und int verwendet, ermöglicht es Ihnen, eine Zeichenfolge zu erstellen, die aus einem Zeichen besteht, das eine bestimmte Anzahl von Malen wiederholt wird. Zum Beispiel, 'new String ('x', 5)' gibt "xxxxx" – matt

3

Versuchen Sie folgendes:

var invalid = Path.GetInvalidFileNameChars().Concat(new [] { '&' }); 

Dies wird eine IEnumerable<char> mit allen ungültigen Zeichen yeild, dein einschließlich.

Hier ist ein vollständiges Beispiel:

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()); 
    } 
} 
+0

Wie würden Sie integrieren in diese: string ungültig = new String (Path.GetInvalidFileNameChars()) + neue Zeichenfolge (Path.GetInvalidPathChars()) – Rod

1

Eine Erweiterungsmethode ist hier die beste Wahl.

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(); 
    } 
} 

Dann ist es wie folgt verwenden:

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

Es wird Ihre ungültigen Zeichen zu dem, was schon da drin verketten.

15
typeof(Path).GetField("InvalidFileNameChars", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, new[] { 'o', 'v', 'e', 'r', '9', '0', '0', '0' }); 
+0

+1 für clever sein, aber ich würde eine Dichtung blasen, wenn ich jemals so etwas in der Produktion Code :) –

+3

Ich kann nicht glauben, Menschen wähle das aus. Nicht dass es nicht schlau ist - es ist; aber wenn ich einen Programmierer im Produktionscode sehen würde, würde ich laut fluchen, seine Arbeit beim Daily WTF einreichen und rennen. Schnell. –

+4

Die Leute, die das gewählt haben, taten dies vor allem, weil sie einen Sinn für Humor haben. Natürlich würde das gleiche in Ruby viel breiter akzeptiert werden - hauptsächlich wegen der Sprachunterstützung (gegen die hier gezeigte Rahmenunterstützung) für eine solche Metaprogrammierung. Natürlich war das keine Ruby-Frage, aber selbst wenn man keinen Wert darin sieht zu lernen, wie und warum das in einer anderen Welt in Ordnung ist, schlägt es zumindest Reflection vor (was keine der Antworten getan hat), was a Gute Sache, mit der man vertraut ist (wenn aus keinem anderen Grund als zu wissen, dass dies kein guter Zweck ist). –

Verwandte Themen