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

~/端末はチルダパスを自動的に展開します

于 2009-08-20T00:41:56.447 に答える
2

OS X でファイルへのパスが必要な場合は、コマンドを入力している Terminal.app ウィンドウにファイルをドラッグするだけで取得できます。出来上がり!

于 2009-08-20T01:02:14.087 に答える
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 に答える
0

閉じる...それは

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

... ここで、{Volume} はハード ドライブの名前です。以下を使用して試すこともできます。

~/Desktop/words.txt

... where~は「ホーム ディレクトリ」を意味すると理解されていますが、これは正しく解決されない可能性があります。

于 2009-08-19T23:57:14.147 に答える