I had a problem deleting / rewriting a file using my program, which is also used (read) by my program. The problem is that, because my program reads data from a file (output.txt), it puts the file in an "in use" state, which makes it impossible to delete or overwrite the file.
I donβt understand why the file remains βin useβ because I close the file after use with fclose ();
this is my code:
bool bBool = true while(bBool){ //Run myprogram.exe tot generate (a new) output.txt //Create file pointer and open file FILE* pInputFile = NULL; pInputFile = fopen("output.txt", "r"); // //then I do some reading using fscanf() // //And when I'm done reading I close the file using fclose() fclose(pInputFile); //The next step is deleting the output.txt if( remove( "output.txt" ) == -1 ){ //ERROR }else{ //Succesfull } }
I use fclose () to close the file, but the file remains in use by my program until my program is completely disabled.
Which solution frees the file so that it can be deleted / overwritten?
In fact, my code is not a loop without end; )
Thanks in advance!
Marco
Update
I like to request the part of my code that also generates the file 'in use'. This is not a loop, and this function is called from main ();
Here is the code snippet:
int iShapeNr = 0; void firstRun() { //Run program that generates output.txt runProgram(); //Open Shape data file FILE* pInputFile = NULL; int iNumber = 0; pInputFile = fopen("output.txt", "r"); //Put all orientations of al detected shapes in an array int iShapeNr = 0; int iRotationBuffer[1024];//1024 is maximum detectable shapes, can be changed in RoboRealm int iXMinBuffer[1024]; int iXMaxBuffer[1024]; int iYMinBuffer[1024]; int iYMaxBuffer[1024]; while(feof(pInputFile) == 0){ for(int i=0;i<9;i++){ fscanf(pInputFile, "%d", &iNumber); fscanf(pInputFile, ","); if(i == 1) { iRotationBuffer[iShapeNr] = iNumber; } if(i == 3){//xmin iXMinBuffer[iShapeNr] = iNumber; } if(i == 4){//xmax iXMaxBuffer[iShapeNr] = iNumber; } if(i == 5){//ymin iYMinBuffer[iShapeNr] = iNumber; } if(i == 6){//ymax iYMaxBuffer[iShapeNr] = iNumber; } } iShapeNr++; } fflush(pInputFile); fclose(pInputFile); }
The while loop parses the file. The output.txt file contains sets of 9 variables, the number of sets is unknown, but always in sets of 9.
output.txt may contain, for example: 0,1,2,3,4,5,6,7,8,8,7,6,5,4,1,2,3,0
update 2
code:
void runProgram(){ //Check if output.txt exists, if so delete it if(fileExists("output.txt") == 1){ //Delete output.txt if( remove( "output2.txt" ) == -1 ){ //errormessage }else{ //succesfull } } //start program ShellExecute( NULL, TEXT("open"), TEXT("program.exe"), NULL, NULL, SW_SHOWMAXIMIZED); while(fileExists("output.txt") == 0); //Close program int iCheck = system("taskkill /IM program.exe"); if(iCheck != 0){ //error could not shut down } }
sorry for using pre again, but I am not getting the formatting of this site :(