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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top