0

我刚开始使用 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

4 回答 4

2

桌面的路径是/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 中,但如果你可以在 Cocoa 库中获得的话,翻译成 C# 应该不难。


您发布的代码可以正常工作:

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

你的终端会自动扩展~/tilda 路径

于 2009-08-20T00:41:56.447 回答
2

如果您需要 OS X 中文件的路径,一种简单的获取方法是将文件拖到您正在键入命令的 Terminal.app 窗口中。瞧!

于 2009-08-20T01:02:14.087 回答
0

关闭...它是

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

... 其中 {Volume} 是您的硬盘驱动器的名称。您也可以尝试使用:

~/Desktop/words.txt

... where~被理解为“您的主目录”,但这可能无法正确解析。

于 2009-08-19T23:57:14.147 回答
0

(注意 - 这似乎是一个 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");

将文件名作为参数传递时遇到的问题是,您需要将当前工作目录设置为文件所在的位置。

于 2009-08-20T00:54:08.437 回答