2gb problem bekomme - pos



  • hallo habe ein problem
    ich extrahiere aus einer großen datei

    wenn die datei größer als 2gb ist gibt mir das programm einen

    - wert

    hier der source

    void CextrrebDlg::OnBnClickedButton1()
    
    {
    
     char filename[100],filename2[100],filename3[100],path[100],Temp3[300],Temp[200],lba[100];
    
      unsigned char Byte1[2048];
    
      FILE *file_ptr;
      FILE *LBATXT;
      FILE *output_ptr;
    
     long indx,z;
     unsigned long  DEB,LG;
    
      CWnd* pWnd = GetDlgItem(PATH);
      CWnd* pT1 = GetDlgItem(T1);
      CWnd* pT2 = GetDlgItem(T2);
      CWnd* pT3 = GetDlgItem(T3);
      CWnd* pLBA = GetDlgItem(LBA);
    
      pWnd->GetWindowText(path,100);
      pLBA->GetWindowText(lba,100);
      pT2->SetWindowText(_T("Extracting LBA, please Wait"));
    
      sprintf(filename,"%s%s",path,lba) ;
      sprintf(filename2,"%sWork\\worktbl.TXT",path) ;
    
     if((file_ptr=fopen(filename,"rb"))==NULL)
      {
        sprintf(Temp,"Level [2] - Error Opening %s", filename);
    	MessageBox(Temp);
        exit(0);
      }
    
      if((LBATXT=fopen(filename2, "rt"))==NULL)
      {
        sprintf(Temp,"Level [2] - Error Opening %s", filename2);
    	MessageBox(Temp);
        exit(0);
      }
    
    int  StepIt();                      
    
          CProgressCtrl* pBar=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1); 
    pBar->SetRange(0,435); 
    pBar->SetPos(0);
    pBar->SetStep(1);
    
     do
    
     {
    
       UpdateWindow();
       bool ReloadWindow();
    
       fgets(Temp, 200, LBATXT);
        for(indx=0;indx<200;indx++)
    	{
          if(Temp[indx]=='\n') Temp[indx]='\0';
    	};
    
        for(indx=0;indx<8;indx++)
    	{
          ps2conv[indx]= Temp[indx];
    	};
        DEB = hex2dec();
    
        sprintf(Temp3,"%d",DEB);
        pT3->SetWindowText(Temp3);
    
    	for(indx=0;indx<8;indx++)
    	{
          ps2conv[indx]= Temp[indx+9];
    	};
        LG = hex2dec();
    
    	z = strlen(Temp)-18;
    
    	for(indx=0;indx<z;indx++)
    	{
          filename3[indx] = Temp[indx+18];
    	};
        filename3[indx]='\0';
    	if (indx ==0) break;
    
    	sprintf(Temp,"%sWork\\%s",path,filename3);
        pT2->SetWindowText(_T(filename3));
        UpdateWindow();
        if((output_ptr=fopen(Temp,"wb"))==NULL)
    	{
           sprintf(Temp,"Level[3] - Error Opening [%s]", filename3);
    	   MessageBox(Temp);
           exit(0);
    	}
    
    	fseek(file_ptr,DEB,SEEK_SET);
    

    DEB = Start position

    hab es schon mit unsigned long probiert
    bekomme aber trotz dem einen - wert
    wens über die 2gb geht

    kann mir einer helfen ?

    Danke



  • Die C Funktion die du da verwendest kannst für den Fall wieder vergessen. die verwenden long als fileoffset und das geht bis +2147483647 hoch was 2GB sind, mehr geht net. Wirst wohl oder über auf die Win32 funktionen ausweichen müssen.


Anmelden zum Antworten