שאלה על GetOpenFileName

ilankt

New member
שאלה על GetOpenFileName

יש לי בעיה כשאני משתמש בפונקציה הנ"ל. הפונקציה עצמה עובדת, אבל כל פעם שאני משתמש בה, אז אני לא יכול לטעון קבצים משום מה, הוא אומר שהוקבץ לא קיים... מה הסיבה יכולה להיות? אני חושב שזה משאיר garbage... הנה הקוד שהשתמשתי בו:
char szFile[256]; void ShowOpen(void) { OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = g_hWnd; ofn.lpstrFile = szFile; ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = 256; ofn.lpstrFilter = "Map Files\0*.MAP\0"; ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 256; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; GetOpenFileName(&ofn); }​
בתודה מראש
 

ilankt

New member
ד"א

הקבצים שאי אפשר לפתוח זה לא קובץ שאני מקבל מהפונקציה הזאת, זה קובץ שאני סתם פותח למשל: ifstream fin; fin.open "data/file.blabla"
 

annefan

New member
אז מה הקשר ל-GetOpenFileName ?

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

ilankt

New member
זה קוד לא קשור

הוא פשוט לא יכול לפתוח קבצים... הוא אומר שהקבצים לא קיימים וזה קורה רק אם אני משתמש בפונקציה הזאת...
 

yoash17

New member
יכול להיות שה...

יכול להיות שהשימוש בפונקציה גורם לשינוי הספריה שבה מחפשים את הקבצים.
 

gmorphus

New member
לא מסובך לבדוק את זה

יש פונקציות API בדיוק בשביל זה. אני חושב משהו כמו GetCurrentDirectory
 

annefan

New member
מוזר...

לקחתי את הקוד שלך, הפכתי את ofn לגלובלי, שיניתי פילטר, הדפסתי את השם של הקובץ לאחר הפונקציה, והכל בסדר. אחר כך, פתחתי את הקובץ, וקראתי ממנו ושוב הכל בסדר:
#include <windows.h> #include <iostream> #include <fstream> #include <string> HWND g_hWnd; char szFile[256]; OPENFILENAME ofn; bool ShowOpen(void) { ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = g_hWnd; ofn.lpstrFile = szFile; ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = 256; ofn.lpstrFilter = "Text Files\0*.txt\0"; ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 256; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; return GetOpenFileName(&ofn); } int main() { std::cout << ShowOpen() << std::endl; std::cout << ofn.lpstrFile << std::endl; std::ifstream fs(ofn.lpstrFile); std::string str; while (fs >> str) std::cout << str << std::endl; return 0; }​
 
למעלה