自分のプログラムでも使用 (読み取り) されているファイルを自分のプログラムを使用して削除/上書きする際に問題が発生しました。問題は、私のプログラムがファイル (output.txt) からデータを読み取っているため、ファイルが「使用中」の状態になり、ファイルを削除または上書きできなくなることです。
fclose(); で使用後にファイルを閉じるため、ファイルが「使用中」のままである理由がわかりません。
これは私のコードです:
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
}
}
fclose() を使用してファイルを閉じますが、プログラムが完全にシャットダウンされるまで、ファイルはプログラムで使用されたままになります。
削除/上書きできるようにファイルを解放する解決策は何ですか?
実際には、私のコードは終わりのないループではありません。)
前もって感謝します!
マルコ
アップデート
「使用中」のファイルも生成するコードの一部を尋ねるように。これはループではなく、この関数は main(); から呼び出されています。
コードの一部を次に示します。
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);
}
while ループはファイルを解析します。output.txt には 9 個の変数のセットが含まれています。セットの数は不明ですが、常に 9 個のセットになっています。
output.txt には、たとえば、0,1,2,3,4,5,6,7,8,8,7,6,5,4,1,2,3,0 を含めることができます。
更新 2
コード:
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
}
}
pre を再度使用して申し訳ありませんが、このサイトのフォーマットがわかりません :(