2009-07-31 6 views
0

Je veux savoir que Filename1, fourni par l'utilisateur est le même que stocké dans DB (Filename2).Localisation - comment vérifier que Filename1 et Filename2 sont les mêmes

j'étais sur le point d'utiliser

string.Equals(Filename1, Filename2, StringComparison.CurrentCultureIgnoreCase) 

mais je doutais si je devrais utiliser StringComparison.InvariantCultureIgnoreCase.

De toute évidence, je dois faire cela de la même manière que le système d'exploitation, ou utiliser l'API appropriée. Dans certaines cultures, AFAIK, les caractères (par exemple le chant) peuvent changer si le caractère suivant est en majuscule. Comme je cible principalement le marché anglophone, j'aimerais que mon logiciel fonctionne bien partout dans le monde.

Répondre

1

Pour citer Michael Kaplan:

Si vous essayez de comparer des identifiants symboliques ou des objets du système d'exploitation comme les noms de fichiers ou les canaux nommés, utilisez une méthode de type ordinal (ou une méthode de type OrdinalIgnoreCase).

En d'autres termes, utiliser StringComparison.OrdinalIgnoreCase comme argument de string.Equals pour imiter le système de fichiers Windows.

0

Si les fichiers sont réellement existant sur le disque (que je suppose), vous pouvez canoniser le nom du fichier à l'aide Directory.GetFiles() puis comparer le nom du fichier canonique:

string fileName1 = @"C:\someFolder/sOmeFiLE.txt"; 
string fileName2 = @"C:\somefolder\someFile.txt"; 

string canonicalFileName1 = Directory.GetFiles(
     Path.GetDirectoryName(fileName1), 
     Path.GetFileName(fileName1))[0]; 

string canonicalFileName2 = Directory.GetFiles(
     Path.GetDirectoryName(fileName2), 
     Path.GetFileName(fileName2))[0]; 

bool isEqual = string.Compare(canonicalFileName1, canonicalFileName2) == 0; 
1

Oui, vous devez utiliser la culture invariant. Je le ferais probablement sans sensibilité à la casse car je suis sûr que cela n'affectera pas la culture invariante (sinon ce ne serait pas très bien).

Si vous considérez (je ne sais pas si c'est vrai), que votre base de données a été faite sur une machine différente en utilisant une culture différente, ne pas utiliser la comparaison invariante vous causerait des problèmes.

Si vous n'ignorez pas le cas, eh bien, si je renommer mon dossier 'Windows' en 'windows', vous diriez que mes fichiers dans leur n'existe plus, alors que c'est le cas.

Questions connexes