2009-08-19 12 views
0

Ich habe gerade angefangen, mit C & Xcode zu arbeiten, und ich habe eine kleine Schwierigkeit bekommen.Xcode und Übergabe von Befehlszeilenargumenten

Alles, was ich tun möchte, ist eine Datei von der Kommandozeile lesen und sehen Sie die Ausgabe im Terminal. Ich denke, mein Problem liegt in dem Pfad zu der Datei, die ich einlesen möchte. Ich benutze einen Mac und die Datei ist auf meinem Desktop, so dass der Pfad Users/myName/Desktop/words.txt sein sollte. Ist das richtig?

Dies ist mein 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 
+2

Sie meinen Objective-C, oder? –

Antwort

2

Wenn Sie den Pfad zu einer Datei in OS X benötigen, können Sie die Datei einfach in das Terminal.app-Fenster ziehen, in dem Sie den Befehl eingeben. Voila!

+0

Großer Tipp was !! –

0

schließen ... es ist

/{Volume}/Users/myName/Desktop/words.txt

... where {Volume} der Name Ihrer Festplatte. Sie können auch unter Verwendung versuchen:

~/Desktop/words.txt

... wo ~ verstanden wird „Ihr Home-Verzeichnis“ bedeuten, aber dies möglicherweise nicht richtig lösen.

+0

das löste mein Problem nicht (entweder Vorschlag) Ich benutzte: /Macintosh HD/Benutzer/russ/Desktop/words.txt & ~/Desktop/words.txt –

2

Der Weg auf den Desktop ist /Users/[username]/Desktop/

~/Desktop/ ist eine benutzerunabhängige Möglichkeit, dies zu bezeichnen, ~ repräsentiert das aktuelle Benutzer Home-Verzeichnis. Es muss

Nicht sicher über die Verwendung von C# unter Verwendung eines Verfahrens wie stringByExpandingTildeInPath erweitert werden (ich habe es nie auf Mac OS X verwendet wird), aber in Objective-C/Cocoa, würden Sie ..

// 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); 

Dies ist der stabilste Weg, den Desktop-Pfad zu erhalten, da ein Benutzer seinen Desktop-Ordner anderswo verschieben könnte (obwohl dies ziemlich unwahrscheinlich ist). Eine weitere gültige Option ist die NSString-Methode zu verwenden stringByExpandingTildeInPath:

NSString *desktop = [@"~/Desktop" stringByExpandingTildeInPath]; 
NSString *theFile = [desktop stringByAppendingPathComponent:@"words.txt"] 

Wie gesagt, beide sind diejenigen, in Objective-C, aber es sollte nicht schwer zu C# zu übersetzen, vorausgesetzt, Sie an den Cocoa-Bibliotheken erhalten können .


Der Code, den Sie Werke geschrieben richtig:

dbr:.../build/Debug $ ./yourcode ~/Desktop/words.txt 
yourcode[2106:903] russ 
yourcode[2106:903] this is words.txt is 17 chars long 

Ihr Terminal automatisch den Pfad ~/ tilda erweitert

0

(Anmerkung - dies ist eine C Frage zu sein scheint, kein C# Frage)

Eigentlich können Sie tun:

/Benutzer/meinName/Desktop/words.txt

Sie müssen den Pfad zu dem Volume nicht angeben.

jedoch den vollständigen Pfad zu bekommen in C Sie so etwas wie tun würde:

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
char *home, *fullPath; 

home = getenv("HOME"); 

fullPath = strcat(home, "/Desktop/words.txt"); 

Das Problem Sie laufen in mit Bestehen der Dateinamen als ein Argument ist, dass Sie das aktuelle Arbeits festlegen müssen Verzeichnis an den Ort, an dem die Datei existiert.

Verwandte Themen