עבור לתוכן

יש לי באג בתוכנית שלי, בניסיון לפתוח קובץ ב++C

Featured Replies

פורסם

אני מנסה לגרום לקובץ שאני פותח ע"י Browse יפתח גם ב ++C

אבל אחרי שאני בוחר את הקובץ הוא נותן לי שגיאה, התוכנית עוברת קומפילציה ואני מריץ אותה אבל נתקעת באמצע

החלק קוד שזה נתקע הוא בחלק שהוא מנסה לעשות fopen לקובץ

void browse(char *file)
{
char pathName[260];


OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);

ofn.lpstrFile = pathName;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(pathName);

GetOpenFileName(&ofn);

//cout<<"selected file's name is: "<<ofn.lpstrFile<<endl;
file = ofn.lpstrFile;
}


void horse_encryption()
{
int i;
FILE *input_file, *fout;
char ch, ezer, *file=0;


browse(file);



input_file = fopen(file,"rb");
if (input_file == NULL )
{
printf("Error Opening File");
exit(1);
}

פורסם

אתה צריך להקצות מחדש את השם את הקובץ לפני שאתה יוצא מהפונ.

פורסם
  • מחבר

מה??

לא הבנתי מה אני צריך לעשות...

:s07:

פורסם

תעשה:



setstr(file, ofn.lpstrFile);

בBROWSE. שים לב שבfile צריך להיות מאותחל במשהו לפני שאתה שולח אותו לSETSTR(בNULL - 0, או בכל מחרוזת אחרת שהקצאת מקודם, ללא עזרת הקומפיילר, וללא מחרוזת סטטית).

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

פורסם
  • מחבר

עשיתי את מה שאמרת

אבל אני עדיין מקבל בדיוק את אותה שגיאה שקיבלתי קודם :-\

פורסם

אתה בטוח שofn.lpstrFile מחזיר CHAR *?

אני אבדוק את זה עכשיו.

פורסם

כשאתה מדפיס עם הCOUT, זה מדפיס לך טוב?

פורסם
  • מחבר

כשאני מדפסי עם cout בפונקציה הוא מדפיס טוב

אבל אני לא מצליח להוציא את זה מהפונקציה

פורסם

ניסית להדפיס את שם הקובץ לאחר שאתה חוזר מהפונ?

תנסה להדפיס ותבדוק את שם הקובץ בכלל נמצא בfile.

פורסם

תבצע הקצאה דינמית ל- file לפני שליחתו לפונקתיה ובתוך הפונקציה על תשווה מצביע לשם הקובץ הנבחר לעותק של file אלא

תבצע strcpy של שם הקובץ עצמו ל- file :

http://www2.mta.ac.il/~amitz/downloads/dialog%20box%20in%20cpp.cpp

פורסם
  • מחבר

מצויין אחי!!

כיף לראות את זה סוף סוף עובד..

;D

פורסם
  • מחבר

מכיוון שזה דיי דומה לבעיה הקודמת העדפתי לא לפתוח דיון חדש

והפעם

יצרתי פונקציה שכותבת ומוחקת את מה שהמשתמש כותב על המסך ומחזירה את זה בתור מערך

המטרה שלה הוא בעצם לקבל באופן ידני את הכתובת של הקובץ שאני רוצה לפתוח, לפי מה שנראה לי היא מחזירה את הערך

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

בקיצור מספיק עם הדיבורים

פונקציה:


void klita (char *file_name)
{

int X_POS=200;
int Y_POS=300;
char key ;
char  buf[2] ;
int x =  X_POS;
int y =  Y_POS;
int index=0;
char buffer[260]={NULL};

buf[1]='\0' ;


setcolor(6);
settextstyle(0,0,2);
outtextxy(300,192,"Please write the full path");
outtextxy(348,224,"for the output file.");

settextstyle(0,0,2);
do
{
key = getch();

buf[0] = key ;
setcolor(9);
if ( key != '\b' )
{
outtextxy(x,y,buf) ;
if (x>800)
{
y=y+32;
x=X_POS+48;
}
else
{
x=x+16;
}

buffer[index]=key;
index++;
}

if ( key == '\b' )
{
if(y==Y_POS)
{
if(x>X_POS)
{
x=x-16;
}
}

else
{
if(x>X_POS+48)
{
x=x-16;
}

else if(x==X_POS+48)
{
y=y-32;
x=808;
}
}
setcolor(0) ;
outtextxy(x,y,buf) ;
index--;
buffer[index]=NULL;
}

} while( key!=13 );

cleardevice();
strcpy(file_name,buffer);
//cout<<"selected file's name is: "<<file_name<<endl;



void horse_encryption()
{
    int i;
FILE *input_file, *fout;
char ch, ezer, *in_file,*out_file=0;

in_file = new char[STR_SIZE];
out_file = new char[STR_SIZE];

browse(in_file);

//cout<<"selected file's name is: "<<getfile<<endl;

input_file = fopen(in_file,"rb");

if (input_file == NULL )
{
printf("Error Opening File\n");
exit(1);
}


klita(out_file);
cout<<"selected file's name is: "<<out_file<<endl;


fout = fopen (out_file, "wb");
if (fout == NULL )
{
printf("Error no 2\n");
exit(1);
}

אני חושב שהבעיה נובעת אולי מאיפוס לא נכון של הפוינטר או המערך ,ואז הוא לא מחזיר באמת את מה שאני צריך

מה אתם אומרים?

פורסם

הפונקציה browse שלך לא בסדר.

היא מקבלת pointer by value ולכן אתה לא יכול לעשות את ההשמה לפוינטר שאתה מעביר (כלומר, אתה יכול לעשות את ההשמה, אבל הערך ילך לאיבוד כשהפונקציה יוצאת.

פיתרון 1 - תשתמש ב- strncpy כדי להעתיק את שם הקובץ (תוודא שיש לך מספיק מקום במערך, עדיף גם שתעביר את גודל ה- buffer שלך כדי לוודא את זה)

פיתרון 2 - במקום להעביר לפונציה פוינטר, תעביר reference לפוינטר או פוינטר לפוינטר, ותפנה את הזיכרון מחוץ לפונקציה.

פורסם
  • מחבר

דווקא הפונקתיה Browse עובדת מצויין,

הבעיה עכשיו היא כמו שציינתי בפונקתיה שניה klita

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


klita(out_file);
cout<<"selected file's name is: "<<out_file<<endl;

מחוץ לפונקציה כמובן, וזה נראה טוב

אבל משום מה כשאני שולח את הפוינטר בניסון לפתיחת הקובץ מהסוג הזה אני מקבל את השגיאה

Error no 2

פורסם

יש מצב שהתו האחרון (newline) גם נמצא לך ב- buffer?

ארכיון

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

דיונים חדשים