Xcode и передача аргументов командной строки - PullRequest
0 голосов
/ 20 августа 2009

Я только начал работать с C & Xcode и столкнулся с небольшой трудностью.

Все, что я хочу сделать, это прочитать файл из командной строки и посмотреть вывод в терминале. Я думаю, что моя проблема связана с путем к файлу, который я хочу прочитать. Я использую Mac, и файл находится на моем рабочем столе, поэтому путь должен быть Users/myName/Desktop/words.txt. Это правильно?

Это мой код:

#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

Ответы [ 4 ]

2 голосов
/ 20 августа 2009

Если вам нужен путь к файлу в OS X, простой способ получить его - просто перетащить файл в окно Terminal.app, где вы вводите команду. Voila!

2 голосов
/ 20 августа 2009

Путь к рабочему столу /Users/[username]/Desktop/

~/Desktop/ - это независимый от пользователя способ обозначения этого, ~ представляет домашний каталог текущих пользователей. Его необходимо расширить с помощью метода, подобного stringByExpandingTildeInPath

Не уверен насчет использования C # (я никогда не использовал его в Mac OS X), но в Objective-C / Cocoa вы бы это сделали ..

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

Это наиболее надежный способ получения пути к рабочему столу, поскольку пользователь может технически переместить свою папку рабочего стола в другое место (хотя это маловероятно). Другим допустимым вариантом является использование метода NSString stringByExpandingTildeInPath:

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

Как я уже сказал, оба они в Objective-C, но это не должно быть сложно перевести на C #, при условии, что вы можете получить в библиотеках Какао.


Код, который вы разместили, работает правильно:

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

Ваш терминал автоматически расширяет ~/ путь тильды

0 голосов
/ 20 августа 2009

(Примечание: это вопрос C, а не C #)

На самом деле, вы можете сделать:

/ Пользователи / MyName / Desktop / words.txt

Вам не нужно указывать путь к тому.

Однако, чтобы получить полный путь в C, вы должны сделать что-то вроде:

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

home = getenv("HOME");

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

Проблема, с которой вы сталкиваетесь при передаче имени файла в качестве аргумента, заключается в том, что вам нужно установить текущий рабочий каталог в место, где существует файл.

0 голосов
/ 20 августа 2009

Закрыть ... это

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

... где {Volume} - это имя вашего жесткого диска. Вы также можете попробовать использовать:

~/Desktop/words.txt

... где ~ понимается как «ваш домашний каталог», но это может решить неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...