Pregunta

Acabo de empezar a trabajar con C & Xcode y me he encontrado con un poco de dificultad.

Todo lo que quiero hacer es leer un archivo desde la línea de comandos y ver la salida de la terminal. Creo que mi problema radica en la ruta de acceso al archivo que quiero leer. Estoy usando un Mac y el archivo está en mi escritorio, por lo que la ruta debe ser Users/myName/Desktop/words.txt. ¿Es esto correcto?

Este es mi 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
¿Fue útil?

Solución

Si usted necesita la ruta a un archivo en OS X, una forma sencilla de conseguirlo es simplemente arrastrar el archivo a la ventana Terminal.app el lugar donde escribe el comando. Voila!

Otros consejos

La ruta de acceso al escritorio es /Users/[username]/Desktop/

~/Desktop/ es una manera independiente del usuario de denotar esto, ~ representa el directorio personal del usuario actual. Se debe ampliarse utilizando un método como stringByExpandingTildeInPath

No está seguro sobre el uso de C # (yo nunca he utilizado en Mac OS X), pero en Objective-C / Cocoa, que haría ..

// 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 es la forma más robusta de conseguir el camino de escritorio, ya que un usuario puede mover técnicamente su carpeta Escritorio en otro lugar (aunque esto es bastante improbable). Otra opción válida es utilizar el método NSString stringByExpandingTildeInPath:

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

Como ya he dicho, tanto los que están en Objective-C, pero no debería ser difícil de traducir a C #, suponiendo que se puede conseguir en las librerías de cacao.


El código que envió funciona correctamente:

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

El terminal se expande automáticamente la ruta tilda ~/

Cerrar ... es

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

... donde {} de volumen es el nombre de su disco duro. También puede tratar de usar:

~/Desktop/words.txt

... donde se entiende ~ para significar "el directorio de inicio", pero esto podría no resolver correctamente.

(Nota - esto parece ser una pregunta C, no es una cuestión de C #)

En realidad, puede hacerlo:

/Users/myName/Desktop/words.txt

Usted no tiene que dar la ruta de acceso al volumen.

Sin embargo, para obtener la ruta completa en C que haría algo como:

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

home = getenv("HOME");

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

El problema se está ejecutando en la que pasa el nombre del archivo como argumento es que se necesita para establecer el directorio de trabajo actual en el lugar donde se encuentra el archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top