עבור לתוכן

מציאת הcurrent path בvisual c++2005

Featured Replies

פורסם

ברצוני לפתוח קובץ טקסט בויזואל 2005 הבעיה היא שהוא נמצא בתקייה איפה שכל קבצי הH וcpp

ניסיתי את הפונקציה getcwd_ הבעיה היא שהאובייקט של פתיחת הקובץ דורש שהpath יראה משהו מהצורה

c:\\documents\\temp\\b.txt ואילו הgetcwd_ מחזיר לי את הדרך רק עם סלאש אחד

פורסם

אתה לא צריך להכניס נתיב מלא אם אתה רוצה לטעון קובץ שנמצא בתיקיה הנוחכית שלך (או בPATH), מספיק להכניס רק את שם הקובץ

פורסם
  • מחבר

הבעיה היא כשאני בודק האם הקובץ נפתח בהצלחה ע"י הפונקציה is_open הוא רושם שהקובץ לא נפתח בהצלחה

כשאני רושם רק את שם הקובץ

פורסם

בדרך כלל הספריה הנוכחית היא איפה שנמצא ה-executable ולא בתיקיה עם קבצי ה-cpp וה-h.

פורסם
  • מחבר

אולי לא הייתי ברור, הקובץ טקסט נמצא באותה תקיה איפה קבצי הCPP והH, יש למשהו רעיון איך אני מקבל את ה"path" שבו הקובץ הזה

נמצא?

פורסם

איך אתה מצפה שהתוכנה תדע איפה נמצא קובץ כלשהו על המחשב שלך?

אחרי הקומפילציה, אין קשר יותר בין קובץ ה-exe וקבצי ה-h/cpp. אי אפשר לדעת איפה נמצאים הקבצים שמהם קומפלה התכנית (כי כמובן אפשר היה להזיז אותם בינתיים).

פורסם
  • מחבר

כנראה שלא הסברתי את עצמי כמו שצריך או שלא הבנתם אותי נכון

אני רוצה לכתוב את המשחק DIGGER(דרך הCONSOLE ככה הולך התרגיל)

אחת הדרישות שם היא שיהיה קובץ שיקרא board.txt וכשהתוכנית תרוץ המשתמש יראה את הboard (הלוח שנמצא בקובץ)

בשביל לפתוח את הקובץ לקריאה הגדרתי את האובייקט ifstream שהוא מקבל מחרוזת(מחרוזת שמייצגת איפה הקובץ נמצא

לדוגמא: C:\\myProg\\borad.txt עכשיו הבעיה שלי כשאני משתמש בפונקציה הgetcwd_ היא מחזירה לי את הערך

C:\myProg\borad.txt האם יש פונקציה או דרך כלשהי לקבל את המחרוזת בצורה הזאת: C:\\myProg\\borad.txt

אני מקווה שעכשיו זה קצת יותר ברור

תודה על העזרה

פורסם

לא נראה לי שהבנת את המשמעות של ה-\\

כשאתה יוצר מחרוזת ככה:

string path = "c:\\myProg\\board.txt";

אז למעשה המחרוזת מכילה את הטקסט

c:\myProg\board.txt

למה צריך פעמיים סלאש? כי סלאש הוא escape character, שנועד להציג תווים מיוחדים (לדוגמה, n\ שמציין סוף שורה ו-t\ שמציין טאב). מה קורה אם אתה רוצה לכתוב את זוג התווים "n\"? אם תכתוב אותם סתם ככה, הקומפיילר יתייחס אליהם כאל התו היחיד שמייצג ירידת שורה. לכן אתה צריך לעשות escaping לסלאש עצמו, כלומר לשים שני סלאשים, כלומר "n\\". לכן, כל פעם שאתה רוצה לכתוב סלאש במחרוזת, צריך לשים שניים כאלה.

כשאתה מדפיס את המחרוזת, היא תודפס רק עם סלאש אחד.

הפונקציה getcwd_ מחזירה בכל מקרה רק עם סלאש אחד, וזה שקול למחרוזת שתכניס ידנית עם שני סלאשים. אתה מוזמן לבדוק בעצמך ע"י השוואת המחרוזות (strcmp).

פורסם
  • מחבר

כתבתי את הקוד הבא

 char path[_MAX_DIR]; 
_getcwd (path, _MAX_DIR);

string pathS=string(path);
pathS+="\borad.txt";
std::ifstream myfile (pathS);

אבל הוא נותן לי הודעה שיש המרת טיפוס בין string לבין char * בשורה האחרונה, איך ניתן לפתור את הבעיה הזאת?

פורסם

קודם כל, כמו שציינתי בהודעה הקודמת שלי, כשאתה רוצה לכתוב מחרוזת שמכילה סלאש, אתה חייב לשים אותו פעמיים.

חוץ מזה, ifstream מקבל פרמטר מטיפוס *const char ולא string. אתה צריך לעשות להשתמש בפונקציה c_str, כלומר:

  pathS+="\\borad.txt";
std::ifstream myfile (pathS.c_str());

פורסם
  • מחבר

הבעיה נפתרה, תודה רבה:)

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים