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, @"..\..\");