fopen_s File not found nach 500tem mal (return 0;) sonst ok ? HELP !
-
Hallo
Hilfe habe schon alles durch gescahut finde aber keinen Fehler

Das Problem ist, dass wenn ich c.a. 500mal nacheinenderreturn 0;in der if() Schleife ausgebe das nechste mal
fopen_s()den File nicht findet ?
Hier der Code in C++
void givedat(/*input*/FILE * codefile,/*input*/ long ID, /*output*/tagData &dat){ // Filepointer wird verändert ! long size; size = sizeof(tagMax) + sizeof(tagMin) + (sizeof(tagData) * ID); fseek (codefile, size, SEEK_SET); fread(&dat, sizeof(tagData), 1, codefile); }und
unsigned int givelastID(/*input*/FILE * codefile){ unsigned int ID; fpos_t position; long size; fgetpos (codefile, &position); fseek (codefile, 0, SEEK_END); size = ftell (codefile); fsetpos (codefile, &position); ID = (( size - sizeof(tagMax) - sizeof(tagMin) ) / sizeof(tagData)); return (ID-1); }jetzt die Haupt-Funktion
FILE *codefile; struct tagMax max; struct tagData dat; //---Symbolname VARIANT vValue0; VariantInit(&vValue0); variables[0]->GetValue(&vValue0); BSTR sPapier = V_BSTR(&vValue0); size_t j = SysStringLen(sPapier); if (j > SIZEPAPIER ){ return EQUILLA_GENERAL_ERROR; } wcscpy_s(max.Papier,sizeof(max.Papier),sPapier); char str[10]; int h=0; str[0]= 's'; str[1]= 'e'; str[2]= 'l'; str[3]= 'l'; str[4]= '_'; for(int i=5;i<9;i++){ str[i]=*(max.Papier + h); h++; } str[9]= '\0'; int k = 0; while(str[k] != ' ' && str[k] != '\0' ){ k++; } str[k]= '\0'; //---ID VARIANT vValue1; VariantInit(&vValue1); variables[1]->GetValue(&vValue1); long ID = V_I4(&vValue1); //---open File fopen_s( &codefile, str, "rb" ); if (codefile == NULL) { LPCWSTR sValue = L"ERORR: File not found"; V_VT(result) = VT_BSTR; V_BSTR(result) = SysAllocString(sValue); //---Aufräumen VariantClear(&vValue0); VariantClear(&vValue1); SysFreeString(sPapier); //---Rückgabewert return 0; } if((ID > long (givelastID(codefile))) || (ID < 0) ){ LPCWSTR sValue = L"ERORR: ID not found"; V_VT(result) = VT_BSTR; V_BSTR(result) = SysAllocString(sValue); //---Aufräumen VariantClear(&vValue0); VariantClear(&vValue1); SysFreeString(sPapier); //---Rückgabewert return 0; // :confused: :confused: :confused: !!!!! hier wenn ich den return 0; auskomentiere pasiert dieser Fehler nicht } //---liest dat Werte ein givedat(codefile, ID, dat); //---Wert als double zurückgeben V_VT(result) = VT_R8; V_R8(result) = (dat.Gewinn); //---Aufräumen fclose(codefile); VariantClear(&vValue0); VariantClear(&vValue1); SysFreeString(sPapier); //---Rückgabewert return 0; }Ich vermute dass ich irgend was nicht aufräume oder nicht frei gebe

-
Hallo,
Ich würde vor dem return 0 noch code zum Schließen der Datei einfügen.
also in zeile 68 der Hauptfunktion noch folgendes einfügen:fclose(codefile);So müsste es dann klappen.
Grüße, Jochen
-
Danke
das mitfclose()wars
