2009-05-26 6 views
5

J'ai un chemin complet comme indiqué ci-dessous. Comment les DTD peuvent-elles être "extraites" de cette partie entière? "Comment obtenir une partie du chemin complet en C#?

sortie désirée:

C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug‌​\DannyGoXuk.DTDs 

Puis-je utiliser des méthodes de String pour cela?
Si oui, alors comment l'obtenir?

+4

S'il vous plaît écrire la sortie que vous voulez de cet exemple. On dirait que vous voulez le nom du fichier, mais vous dites "répertoire". – harpo

+0

Je veux un répertoire DTDs –

+1

Ou peut-être il devrait y avoir un où il y a un. après les DTD? – RichardOD

Répondre

7

Modifier: S'il vous plaît lire attentivement la question de l'OP et tous ses commentaires avant de descendre. La question du titre de l'OP n'est pas EXACTEMENT ce qu'elle voulait. Ma réponse lui a donné ce dont elle avait besoin pour résoudre son problème. C'est pourquoi elle a voté la réponse. Oui, la réponse de Joel est correcte si vous répondez spécifiquement à la question du titre. Mais après avoir lu ses commentaires, vous verrez que ce n'est pas exactement ce qu'elle cherchait. Merci.

Utilisez cette ...

string strFullPath = @"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd"; 
string strDirName; 
int intLocation, intLength; 

intLength = strFullPath.Length; 
intLocation = strFullPath.IndexOf("DTDs"); 

strDirName = strFullPath.Substring(0, intLocation); 

textBox2.Text = strDirName; 
+0

Merci JimDel mais cette partie m'a donné le 0/ "DTDs.xhtml-math-svg-flat.dtd". Je suis juste à la recherche de DTD. Je ne veux pas le fichier xhtml-math-svg-flat.dtd avec lui. –

+0

l'utilisation de cette sous-chaîne à la place ... strDirName = strFullPath.Substring (0, intLocation); – JimDel

+1

Merci Jim ce seulement je cherchais ..... –

76

Utilisez System.IO.Path.GetDirectoryName() pour le chemin d'accès complet ou new DirectoryInfo(path).Parent.Name pour le nom de ce dossier.


Il y a dans le chemin que vous avez publié aucun répertoire nommé « DTDs ». Il semble qu'il existe un fichier nommé "DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd", mais les points (.) Dans ce chemin ne sont pas des caractères séparateurs de répertoire valides. Vouliez-vous dire "DannyGoXuk\DTDs\xhtml-math-svg-flat.dtd"?

Si tel est le cas, étant donné que toute nouvelle voie, vous voulez quelque chose comme ça pour retourner une liste de fichiers dans le dossier DTDs:

string path = @"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk\DTDs\xhtml-math-svg-flat.dtd"; 
string[] files = new DirectoryInfo(path).Parent.GetFiles(); 

dans la fenêtre des propriétés je choisis Type de construction en tant que ressource incorporée.

Et maintenant nous y arrivons enfin. Lorsque vous choisissez "Embedded Resource", l'élément est regroupé dans votre fichier programme exécutable. Il n'y a plus de chemin direct. Au lieu de cela, définissez votre type de construction sur "Contenu" et réglez "Copier dans le répertoire de sortie" sur "Toujours copier" ou "Copier si nouveau".

+0

Ne fonctionne pas.En fait, il retourne la partie non désirée seulement ... –

+0

Il donne la valeur NULL –

+3

GetDirectoryName ("C: \ Mehrdad \ Test") renvoie "C: \ Mehrdad" –

12

Appel

System.IO.Path.GetFileName 

avec le chemin complet du répertoire retourne la dernière partie du chemin qui est un nom de répertoire. GetDirectoryName renvoie le chemin complet du répertoire parent indésirable.

Si vous avez un nom de fichier et que vous voulez juste le nom du répertoire parent:

var directoryFullPath = Path.GetDirectoryName(@"C:\DTDs\mydtd.dtd"); // C:\DTDs 
var directoryName = Path.GetFileName(directoryFullPath); // DTDs 
+1

GetFileName() retournerait "mydtd.dtd" –

+0

GetFileName donné le chemin du répertoire va retourner la dernière partie. Vous devriez l'appeler avec le * chemin du répertoire *, que vous pouvez obtenir à partir de GetDirectoryName. Je l'ai expliqué dans le montage. –

+0

J'ai mal compris que vous faisiez un processus en deux étapes - vous pensiez que vous appeliez GetFileName() sur la chaîne d'origine. –

5
System.IO.Path.GetFileName(System.IO.Path.GetDirectoryName(fullPath)) 

qui renverra simplement le nom du dossier contenant le fichier.

Pour

C:\windows\system32\user32.dll 

ce retournera

system32 

J'inférant que c'est ce que vous voulez.

+0

Merci Harpo vous êtes un peu proche de ma réponse mais ici vous avez le séparateur de répertoire pour obtenir "System32" comme répertoire mais dans mon cas il n'y a pas un tel "/" chose. Alors que j'ai des fichiers à partir de ressources et ces fichiers sont dans le dossier DTDs sous DannyGoXuk Project.so je vais chercher ces fichiers un par un en utilisant boucle foreach et je veux obtenir le répertoire DTDs.Which est juste donné par DannyGoXuk.DTDs.xhtml-math- svg-flat.dtd.where xhtml-math-svg-flat.dtd est un fichier dtd dans le répertoire DTDs sous le projet DannyGoXuk. –

2

Vous pouvez utiliser:

System.IO.Path.GetDirectoryName(path); 
2

Vous pouvez utiliser Path ...

Path.GetDirectoryName(myStr); 
2

Ne pas utiliser directement la manipulation de chaînes. Au lieu d'utiliser GetDirectoryName de la classe Path:

System.IO.Path.GetDirectoryName(myPath); 
+0

Il fonctionne dosent .. –

+0

Cela a fonctionné parfaitement pour moi. –

2

Utilisez l'objet FileInfo ...

FileInfo info = new FileInfo(@"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd"); 
string directoryName = info.Directory.FullName; 

Le fichier ne dispose même pas d'exister vraiment.

+0

Je reçois cette erreur .. Impossible de convertir le type 'System.IO.FileInfo' en 'System.Reflection.FieldInfo' \t Parce que j'utilise les fichiers dans les ressources. –

1

Path.GetDirectory sur le chemin que vous avez spécifiée renvoie:

"C: \ Users \ Ronny \ Desktop \ Sources \ Danny \ Kawas \ trunk \ csharp \ ImportME \ XukMe \ bin \ Debug"

Essayez Vous-même:

var path = Path.GetDirectoryName(@"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd"); 

Votre question est un peu étrange cependant - il n'y a pas de répertoire appelé DTDs.

+0

Directory DTDs est dans le projet DannyGoXuk.i ont intégré tous les fichiers de ressources dans le répertoire DTDs.Dans le code que je veux aller chercher ce répertoire comment le faire, ce que je veux savoir? Merci .. –

5

Utilisation:

string dirName = new DirectoryInfo(fullPath).name; 
9

Vous pouvez également utiliser Directory pour obtenir le répertoire du chemin complet du fichier:

Directory.GetParent(path).FullName 
Questions connexes