Announcement

Collapse
No announcement yet.

stackoverflow durch fopen() fclose()

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • stackoverflow durch fopen() fclose()

    Hallo zusammen,

    ich habe das Problem, dass ich viele Textdateien durchsuchen muss, um Daten auszulesen.
    Es wird eine Liste von ca 100 Zeilen durchsucht. In jeder Zeile werden 10 Dateien geöffnet. Also ca 1000 Mal fopen() und fclose().
    Wenn die Liste klein ist, gibt es keinen stackoverflow.
    Hat jemand ein ähnliches Problem schon gehabt und eventuell eine Lösung dafür ?

    Diese Funktion wird ca 1000 Mal aufgerufen:

    BOOL UtilsCheckArtikelAufPenner(CString sFilePath,CString sLiefNrExt,CString sArtNrExt) /* Artikel = Penner ???******/
    { /****************************/
    FILE *pFile;
    CString sSourceFile;
    char LineBuffer[256];
    CString sLiefNr,sArtNr,sBestand;
    int iLen;
    double dBestand;
    int iBestand;

    pFile = fopen(sFilePath, "r");
    if(! pFile)
    return(FALSE);

    pFile = fopen(sFilePath.GetBuffer(256), "r");
    if(!pFile)
    {
    UtilsTextBox("B","DatenFile kann nicht geöffent werden","","");
    return(FALSE);
    }
    while(fgets(LineBuffer, sizeof(LineBuffer), pFile) != NULL )
    {
    if(*LineBuffer == '#' || strlen(LineBuffer) < 5)
    continue;

    sLiefNr = UtilsExtractFirstString(LineBuffer,';');

    if(sLiefNr != sLiefNrExt)
    continue;

    sArtNr = UtilsExtractTeilStringDelimiter (LineBuffer,';',1);

    iLen = sArtNr.GetLength();
    if(iLen > 0)
    {

    if((sArtNr != sArtNrExt) && (iLen > 0 ))
    continue;
    }
    else
    continue;

    sBestand = UtilsExtractTeilStringDelimiter (LineBuffer,';',3);
    dBestand = UtilsConvertCStringToDouble(sBestand);
    iBestand = (int) dBestand;


    break;
    }

    if(pFile)
    fclose(pFile);

    if(iBestand > 0)
    return(TRUE);
    else
    return(FALSE);


    }

  • #2
    Stackoverflow

    Hallo Eichholzer!

    Versuch mal über Breakpoints die Zeile zu finden, wo sich dein Programm verabschiedet.

    Und wie lautet die Fehlermeldung genau?

    Gruß Ersin Söbütay

    Comment


    • #3
      pFile = fopen(sFilePath, "r");
      if(! pFile)
      return(FALSE);

      pFile = fopen(sFilePath.GetBuffer(256), "r");
      if(!pFile)
      {
      UtilsTextBox("B","DatenFile kann nicht geöffent werden","","");
      return(FALSE);
      }
      du öffnest 2x!
      beim 2. mal überschreibst du deinen Filepointer ohne den alten freizubeben!!!
      -> Möglichkeit des overflows

      Comment


      • #4
        Danke !!!!!!

        doppelte Zeile fopen() - manchmal sieht man den Wald vor lauter Bäumen nicht ....


        Gruss René

        Comment

        Working...
        X