Xcode et passage d'arguments de ligne de commande
-
19-09-2019 - |
Question
Je viens de commencer à travailler avec C & Xcode et j'ai rencontré un peu de difficulté.
Tout ce que je veux faire est de lire un fichier à partir de la ligne de commande et voir la sortie du terminal.
Je pense que mon problème réside dans le chemin vers le fichier que je veux lire. J'utilise un Mac et le fichier est sur mon bureau, de sorte que le chemin doit être Users/myName/Desktop/words.txt
. Est-ce exact?
Ceci est mon code:
#import <Foundation/Foundation.h>
int main (int argc, const char* argv[]){
if(argc == 1){
NSLog(@" you must pass at least one arguement");
return 1;
}
NSLog(@"russ");
FILE* wordFile = fopen(argv[1] , "r");
char word[100];
while (fgets(word,100,wordFile)) {
NSLog(@" %s is %d chars long", word,strlen(word));
}
fclose(wordFile);
return 0;
}//main
La solution
Si vous avez besoin du chemin vers un fichier dans OS X, un moyen facile de le faire est de simplement faire glisser le fichier dans la fenêtre Terminal.app où vous tapez la commande. Le tour est joué!
Autres conseils
Le chemin vers le bureau est /Users/[username]/Desktop/
~/Desktop/
est une manière agnostique par l'utilisateur indiquant cela, ~
représente le répertoire courant de la maison des utilisateurs. Il doit être étendu en utilisant une méthode comme stringByExpandingTildeInPath
Je ne sais pas sur l'utilisation de C # (je ne l'ai jamais utilisé sous Mac OS X), mais en Objective-C / Cocoa, vous feriez ..
// Get array with first index being path to desktop
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES);
// Get the first element
NSString *desktopPath = [paths objectAtIndex:0];
// Append words.txt to path
NSString *theFilePath = [desktopPath stringByAppendingPathComponent:@"words.txt"];
NSLog(@"%@", theFilePath);
Ceci est la façon la plus robuste d'obtenir le chemin de bureau, en tant qu'utilisateur pourrait techniquement déplacer leur dossier de bureau ailleurs où (bien que ce soit assez peu probable). Une autre option valable est d'utiliser la méthode NSString stringByExpandingTildeInPath
:
NSString *desktop = [@"~/Desktop" stringByExpandingTildeInPath];
NSString *theFile = [desktop stringByAppendingPathComponent:@"words.txt"]
Comme je l'ai dit, ceux sont en Objective-C, mais il ne devrait pas être difficile à traduire en C #, en supposant que vous pouvez obtenir dans les bibliothèques de cacao.
Le code affiché ne fonctionne correctement:
dbr:.../build/Debug $ ./yourcode ~/Desktop/words.txt
yourcode[2106:903] russ
yourcode[2106:903] this is words.txt is 17 chars long
Le terminal augmente automatiquement le chemin de tilda ~/
Fermer ... il est
/{Volume}/Users/myName/Desktop/words.txt
... où {} volume est le nom de votre disque dur. Vous pouvez également essayer d'utiliser:
~/Desktop/words.txt
... où ~
, on entend « votre répertoire personnel », mais cela pourrait ne pas résoudre correctement.
(Note - cela semble être une question de C, pas une question C #)
En fait, vous pouvez faire:
/Users/myName/Desktop/words.txt
Vous ne devez pas donner le chemin du volume.
Cependant, pour obtenir le chemin complet en C vous feriez quelque chose comme:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char *home, *fullPath;
home = getenv("HOME");
fullPath = strcat(home, "/Desktop/words.txt");
La question que vous utilisez en passant avec le nom du fichier comme argument est que vous devez définir le répertoire de travail courant à l'endroit où le fichier existe.