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 nacheinender

    return 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 mit

    fclose()
    

    wars 🕶


Anmelden zum Antworten