Вопрос

Я только начал работать с 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
Это было полезно?

Решение

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

Другие советы

Путь к рабочему столу - это /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 # не должно быть сложно, при условии, что вы можете получить доступ к библиотекам Cocoa.


Опубликованный вами код работает корректно:

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

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

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

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

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

~/Desktop/words.txt

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top