Pergunta

Eu só comecei a trabalhar com C & Xcode e eu correr em um pouco de dificuldade.

Tudo que eu quero fazer é ler um arquivo a partir da linha de comando e ver a saída no terminal. Acho que minhas mentiras problema com o caminho para o arquivo que eu quero ler. Eu estou usando um Mac e o arquivo está no meu desktop, de modo que o caminho deve ser Users/myName/Desktop/words.txt. É este correto?

Este é meu código:

#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
Foi útil?

Solução

Se você precisar o caminho para um arquivo no OS X, uma maneira fácil de obtê-lo é simplesmente arrastar o arquivo para a janela do Terminal.app onde você está digitando o comando. Voila!

Outras dicas

O caminho para a área de trabalho é /Users/[username]/Desktop/

~/Desktop/ é uma forma agnóstica pelo usuário de denotar isso, ~ representa o diretório home do usuário atual. Deve ser expandida usando um método como stringByExpandingTildeInPath

Não tenho certeza sobre o uso de C # (eu nunca usei isso no Mac OS X), mas em Objective-C / cacau, você faria ..

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

Esta é a maneira mais robusta de obter o caminho área de trabalho, como um usuário poderia tecnicamente mover seu desktop pasta mais onde (embora isso seja bastante improvável). Outra opção válida é usar o método stringByExpandingTildeInPath NSString:

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

Como eu disse, tanto aqueles estão em Objective-C, mas não deve ser difícil de traduzir para C #, supondo que você pode obter nas bibliotecas de cacau.


O código que você postou funciona corretamente:

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

Seu terminal expande automaticamente o caminho ~/ Tilda

Fechar ... é de

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

... onde {Volume} é o nome do seu disco rígido. Você também pode tentar usar:

~/Desktop/words.txt

... onde ~ Entende-se por "seu diretório home", mas isso pode não resolver corretamente.

(Nota - Esta parece ser uma questão C, não um C # questão)

Na verdade, você pode fazer:

/Users/myName/Desktop/words.txt

Você não tem que dar o caminho para o volume.

No entanto, para obter o caminho completo na C você faria algo como:

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

home = getenv("HOME");

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

O problema que você está correndo para com o passar o nome do arquivo como um argumento é que você precisa para definir o diretório de trabalho atual para o local onde o arquivo existe.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top