datei löschen



  • Oliver1980 schrieb:

    klappt leider auch mit remove nicht: Denke ebend wie gesagt es liegt daran dass der File nicht geschlossen ist. Aber warum file.close() schließt doch die damit geöffnete Datei.

    gebe einfach mal den ganzen Code der Funktion, vielleicht sieht ja jemand woran es liegt. Habe mal alles markiert wo ich denke, dass es für das Problem wichtig ist.

    Datei= fopen("c:\\zwischen.txt","r");    //////
    	std::ofstream file2;                 //////
        file2.open("c:\\zwischen2.txt");          //////
    	memset(abd,0,9);
    	memset(buffer1,0,100);
    	i=-1;i2=-1;merker=0;merker2=0;
        float test=zwischen1;
    	
    	while(1) 
       { 
    	   i=i +1;
           i2=i2+1;
          
    	   cRead=fgetc(Datei); 
           if(feof(Datei)) 
           { 
             break; 
           } 
    	  
    
    	  switch(cRead) 
    		{ 
    
    	  case '0': {abd [i]='0';buffer1[i2]='0';
    		  break;}
          case '1': {abd [i]='1';buffer1[i2]='1';
    		  break;}
    	  case '2': {abd [i]='2';buffer1[i2]='2';
    		  break;}
    	  case '3':{ abd [i]='3';buffer1[i2]='3';
    		  break;}
    	  case '4':{abd [i]='4';buffer1[i2]='4';
    		  break;}
    	  case '5':{ abd [i]='5';buffer1[i2]='5';
    		  break;}
    	  case '6':{ abd [i]='6';buffer1[i2]='6';
    		  break;}
    	  case '7':{ abd [i]='7';buffer1[i2]='7';
    		  break;}
    	  case '8':{ abd [i]='8';buffer1[i2]='8';
    		  break;}
    	  case '9':{ abd [i]='9';buffer1[i2]='9';
    		  break;}
    		case '.':{ abd [i]='.';buffer1[i2]='.';
    			break;}
    		case '\t':{ 
    					
    					if (merker==0) 
    					{
    						zwischen=atof(abd);
    						merker=1;
    					}
    				    buffer1[i2]='\t';
    					memset(abd,0,9);
    					i=-1;
    					break;
    				    }
    
    		case '\n': {
    					buffer1[i2]='\n';
    					buffer1[i2+1]=0;
    					
    					if (merker2==0)
    					{
    						zwischen1 = zwischen;
    						merker2=1;
    					}
    					if (zwischen1 !=zwischen)
    						{
    							                                          file2<<buffer1;////////
    						}
    					memset(buffer1,0,100);
    				    memset(abd,0,9);
    					merker=0;
    					i=-1;
    					i2=-1;
    					break;
    				   }
    
    		}
       }       // while Ende
    	
       fclose(Datei);           ///////////////////
       file2.close;             ////////////////////
       
       
       DeleteFile("c:\\zwischen.txt");                ///////////////
      //DeleteFile("c:\\zwischen2.txt");              ////////////////
        std::remove("c:\\zwischen2.txt");              //////////////
       //CopyFile("c:\\zwischen2.txt", "c:\\zwischen.txt", TRUE);
       //DeleteFile("c:\\zwischen2.txt");
    

    Das seltsame ist dass es bei Datei klappt. Habe überlegt dass zwischen2 von einer anderen Funktion geöffnet ist dem ist aber nicht so

    Warum sparst du dir nicht das ganze switch case gedaddel, könntest ja einfach schreiben:

    if(cRead == '\t'||cRead == '\n')
    {
           if(cRead == '\t')
           {
                if (merker==0) 
    	   {
    		zwischen=atof(abd);
    		merker=1;
    	   }
    	   buffer1[i2]='\t';
    	   memset(abd,0,9);
    	   i=-1;
          }
          else if (cRead == '\n')
          {
                 buffer1[i2]='\n';
    	    buffer1[i2+1]=0;
    	    if (merker2==0)
    	    {
    	    zwischen1 = zwischen;
    	    merker2=1;
    	    }
    	    if (zwischen1 !=zwischen)
    	    {
    	     file2<<buffer1;////////
    	     }
    	     memset(buffer1,0,100);
    	     memset(abd,0,9);
    	     merker=0;
    	     i=-1;
    	     i2=-1;
    	     }
    }
    
    else
    {
       abd[i] = cRead;
       buffer[i2] = cRead;
    }
    


  • Ja stimmt ist kürzer und kommt auf selbe, aber ist jetzt nicht so richtig das Problem. Er schließt die Datei die er mit file.open() geöffnet hat nicht mit file.close(). Dardurch kann ich sie danach nicht löschen. Warum schließt er sie nicht und wie kann ich sie schließen?



  • du könntest erstmal überprüfen, ob sie noch nicht geschlossen ist, also erstmal mit file2.good() schaun, ob se überhaupt zu is, oder net, dann würdest du vllt von dir aus auf den Fehler kommen, also ich seh derzeit keinen.
    abgesehen davon würde ich an deiner Stelle auch nicht C-Filestreaming und C++ Filestreaming mischen, sondern entweder das eine, oder das andere, erleichtert die Übersichtlichkeit



  • file.close;
      if (file.good()==true) cout<< "auf";
    

    da gibt er auf raus, also true. Heißt das jetzt zu oder auf?

    mit den mischen hast du recht. Habe nur das problem das ich sie mit file << buffer1; einlese. Und mit

    cRead=fgetc(Datei);
    

    kontroliere. Kenne leider nicht die Befehle in c++ wo ich beides machen kann.



  • char * buffer="some text";
    char cRead;
    datei << buffer;       // string schreiben
    andere_datei >> cRead; // char lesen
    

    Eigentlich logisch. Nicht wahr ?
    Kurt



  • Cool, ja ziemlich logisch.



  • Jetzt würde ich nur noch gerne wissen wie ich dann Dateien schließen und dann löschen kann. Bei mir klappt es jetzt da ich alles in Funktionen gepackt habe und diese beim Beenden die Datei automatisch schließen. Würde mich aber trotzdem mal intressieren warum es mit file.close nicht geht aber mit f
    close(file)



  • Oliver1980 schrieb:

    file.close;// <= MACH ENDLICH DIE KLAMMERN DA HIN!!!1einself
    


  • Versteh zwar nicht warum wütend. Aber danke genau das wollt ich die ganze Zeit wissen. Hat jetzt geklappt



  • Oliver1980 schrieb:

    Versteh zwar nicht warum wütend. Aber danke genau das wollt ich die ganze Zeit wissen. Hat jetzt geklappt

    dann hättest du genauer lesen sollen, der erste beitrag von Caipi bezieht sich schon darauf



  • Hat aber mit remove leider auch nicht geklappt



  • Oliver1980 schrieb:

    Hat aber mit remove leider auch nicht geklappt

    du hast es immer noch nicht gesehen. schau dir das kommentar im code an ⚠



  • OK jetzt versteh ich es 🙄


Anmelden zum Antworten