Path.Combine () n’ajoute pas de séparateur de répertoire après la lettre du lecteur.

Est-ce que j’utilise Path.Combine méthode Path.Combine ?
Je Path.Combine(ssortingng[]) ce résultat avec Path.Combine(ssortingng[]) :

 C:Users\\Admin\\AppData\\Roaming\\TestProject\\Connections.xml 

Et ceci est le résultat souhaité du code le moins souhaitable: celui qui est le résultat généré par le code mis en commentaire):

 C:\\Users\\Admin\\AppData\\Roaming\\TestProject\\Connections.xml 

Notez le \\ manquant après la lettre de lecteur dans le premier chemin.

L’ancienne méthode (append manuellement des barres obliques inverses, commentée) fonctionne bien, mais je suis à peu près sûre que cela ne fonctionnerait pas sous Linux ou autre chose si elle était compilée en mono.

 ssortingng[] TempSave = Application.UserAppDataPath.Split(Path.DirectorySeparatorChar); ssortingng[] DesiredPath = new ssortingng[TempSave.Length - 2]; for (int i = 0; i < TempSave.Length - 2; i++) { //SaveLocation += TempSave[i] + "\\";//This Works DesiredPath[i] = TempSave[i]; } SaveLocation = Path.Combine(DesiredPath);//This Doesn't Work. ConnectionsFs = new FileStream(Path.Combine(SaveLocation,FileName)/*SaveLocation+FileName*/, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read); 

Fondamentalement, je veux que le résultat final soit le répertoire TestProject , et non le projet lui-même ou sa version.

C’est dans la documentation :

Si path1 n’est pas une référence de lecteur (c’est-à-dire “C:” ou “D:”) et ne se termine pas par un caractère de séparation valide [..], DirectorySeparatorChar est ajouté à path1 avant la concaténation.

Ainsi, votre premier chemin, qui correspond à la lettre de lecteur, ne comporte pas de séparateur de répertoire. Vous pouvez par exemple résoudre ce problème après la scission en ajoutant le séparateur à TempSave[0] , mais cela entraînera des problèmes avec Linux, comme vous l’avez dit.

Vous pouvez également résoudre votre problème actuel différemment. Voir Comment trouver le répertoire parent en C #? , ou tout simplement append ..\..\ comme @Dan le suggère pour que vous puissiez sauter la division:

 ssortingng desiredPath = Path.Combine(Application.UserAppDataPath, @"..\..\");