Caractères illégaux dans le chemin d'accès lors de l'utilisation de StreamReader

J'ai de la difficulté avec l'ouverture d'un StreamReader objet en C#. Je reçois toujours l'exception Illegal characters in path. La seule façon que je peux l'obtenir pour fonctionner est de savoir si j'utilise la totalité du nom du chemin d'accès à l'aide de la @ symbole pour ne pas échapper à toute \ caractères dans le chemin d'accès au fichier. Cependant, ce n'est pas vraiment m'aider parce que je commence avec les deux variables distinctes pour le chemin d'accès du fichier et le nom du fichier de sortie à partir d'une autre méthode (qui ne peut pas être changé).

J'ai traversé huit permutations qui ont tous échoué, qui sont commentées ci-dessous pour référence. Par souci de lisibilité, ici, de faire semblant que je suis déclarant dirIni et fileIni au lieu de recevoir leurs valeurs de sortie à partir d'une autre méthode. Avec qui a déclaré, à la fois de la déclaration de style 1 et 2 a échoué à l'aide de tous les quatre concaténation des méthodes. Ce qui se passe ici? J'ai à peu près vu tous les quatre concaténation des méthodes de travail dans d'autres exemples.

EDIT:
J'ai simplifié le code pour afficher 1 version de ce qui rompt pour moi:

string dirIni = @"C:\Users\Dan\AppData\Local\MyApp 4.0\INI\";
string fileIni = @"PWTRANSACTION.INI";

try
{
    string transIniFullFileName = Path.Combine(dirIni, fileIni);

    using (StreamReader file = new StreamReader(transIniFullFileName))
    {
        //do StreamReader stuff...
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

Est ici l'exception de la trace de la pile:

   at System.IO.Path.CheckInvalidPathChars(String path)
   at System.IO.Path.GetFileName(String path)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
   at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize)
   at System.IO.StreamReader..ctor(String path)
   at TestApp.Form1.btnTestRead_Click(Object sender, EventArgs e) in C:\Users\Dan\TestApp\Form1.cs:line 4977
Est-il un problème avec l'espace? peut-être?
Vous avez dit (paraphrase) "faire semblant je ne reçois pas les valeurs à partir d'une autre méthode". Cela pourrait être très important...avez-vous vraiment essayé de faire de la manière que vous avez indiqué ici? Êtes-vous sûr à 100% que les chemins d'accès à partir d'autres méthodes n'ont pas de caractères illégaux?
Le sans échappement dit "traiter tous les éléments suivants comme littéralement" si c'est comme backslashing TOUT ce qu'il faut pour.. il aurais pas besoin de faire de l'espace, mais il y a clairement une différence entre l'ensemble échappé à l'un et pas.
J'ai copié le code, et il a couru avec string transIniFullFileName = "C:\\Users\\Dan\\AppData\\Local\\MyApp 4.0\\INI\\PWTRANSACTION.INI"; décommenté et avec le @ version commentée. J'ai seulement touché un DirectoryNotFoundException. Y aurait-il des caractères magique dans votre version locale que nous ne voyons pas?
l'un des buts d'une Simple Auto-Contenue Exemple Correcte(SSCCE) pour d'autres personnes à être en mesure de copier et de la coller dans leur instance de visual studio et de voir comment il fonctionne pour eux. C'est pourquoi, comme avant, j'ai suggéré de le faire dans un NOUVEAU PROJET, et ensuite, ASSUREZ-vous QU'IL ne parvient TOUJOURS pas de LA MÊME FAÇON.

OriginalL'auteur DanM7 | 2012-09-26