سؤال

لقد بدأت للتو بالعمل مع 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)، ولكن في الهدف - 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"]

كما قلت، كلاهما في موضوعية - ج، ولكن لا ينبغي أن يكون من الصعب ترجمة إلى C #، على افتراض أنه يمكنك الحصول على مكتبات الكاكاو.


الرمز الذي نشرته يعمل بشكل صحيح:

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

... حيث {حجم} هو اسم القرص الصلب الخاص بك. يمكنك أيضا محاولة استخدام:

~/Desktop/words.txt

... أين ~ من المفهوم أن يعني "الدليل المنزلي الخاص بك"، ولكن هذا قد لا يحل بشكل صحيح.

(ملاحظة - يبدو أن هذا سؤال ج، وليس سؤال 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