Xcode e passano la linea di comando
-
19-09-2019 - |
Domanda
Ho appena iniziato a lavorare con C & Xcode e ho incontrato un po 'di difficoltà.
Tutto quello che voglio fare è leggere un file dalla riga di comando e vedere l'output nel terminale.
Penso che il mio problema si trova con il percorso del file che voglio leggere. Io sto usando un Mac e il file è sul mio desktop, in modo che il percorso dovrebbe essere Users/myName/Desktop/words.txt
. È corretto?
Questo è il mio codice:
#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
Soluzione
Se è necessario il percorso di un file in OS X, un modo semplice per farlo è semplicemente trascinare il file nella finestra Terminal.app in cui si sta digitando il comando. Voila!
Altri suggerimenti
Il percorso per il desktop è /Users/[username]/Desktop/
~/Desktop/
è un modo user-agnostica di denotare questo, ~
rappresenta la directory home dell'utente corrente. Deve essere espansa utilizzando un metodo come stringByExpandingTildeInPath
Non sono sicuro su come utilizzare C # (non ho mai usato su Mac OS X), ma in Objective-C / Cocoa, si dovrebbe fare ..
// 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);
Questo è il modo più robusto per determinare il percorso desktop, come un utente potrebbe tecnicamente spostare la loro cartella Desktop altrove (anche se questo è abbastanza improbabile). Un'altra opzione valida è quella di utilizzare il metodo NSString stringByExpandingTildeInPath
:
NSString *desktop = [@"~/Desktop" stringByExpandingTildeInPath];
NSString *theFile = [desktop stringByAppendingPathComponent:@"words.txt"]
Come ho detto, sia quelli sono in Objective-C, ma non dovrebbe essere difficile da tradurre in C #, supponendo che si può ottenere presso le librerie Cocoa.
Il codice che hai postato correttamente opere:
dbr:.../build/Debug $ ./yourcode ~/Desktop/words.txt
yourcode[2106:903] russ
yourcode[2106:903] this is words.txt is 17 chars long
Il terminale si espande automaticamente il percorso tilda ~/
Chiudi ... è
/{Volume}/Users/myName/Desktop/words.txt
... dove {} Volume è il nome del disco rigido. Si può anche provare a utilizzare:
~/Desktop/words.txt
... dove si intende ~
per significare "la vostra directory home", ma questo potrebbe non risolvere in modo corretto.
(nota - questo sembra essere una domanda C, non un C # domanda)
In realtà, si può fare:
/Users/myName/Desktop/words.txt
Non è necessario dare il percorso per il volume.
Tuttavia, per ottenere il percorso completo in C faresti qualcosa di simile:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char *home, *fullPath;
home = getenv("HOME");
fullPath = strcat(home, "/Desktop/words.txt");
Il problema si sta eseguendo in con passare il nome del file come argomento è che è necessario impostare la directory di lavoro corrente al luogo in cui si trova il file.