自分のプログラムで使用されている(読み込み中の)プログラムを使用してファイルの削除/上書きに問題があります。問題は、私のプログラムがファイル(output.txt)からデータを読み込んでいるために、ファイルを「使用中」の状態にしてしまい、ファイルの削除や上書きが不可能になっているようです。fclose()でファイルを閉じてもファイルはまだ使用中です
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
}
}
再び前を使用して申し訳ありませんが、私はドン」このサイトのフォーマットを取得する:(
あなたは何が悪かったのかについての診断を得るためにはstrerror/perrorはを使用していますか?あなたはどんなOSですか? –
fclose()する前にファイルをfflush()しようとしましたか? – Bart
@Bart、それは必要ではありません、 'flcose()'がそれを処理します。 @Marcoは、@Henno Brandsmaが言っているように、 'errno'を検査し、それが何であるかを見ると、これはあなたにいくつかの手がかりを与えるかもしれません。副次的に、これはC++でタグ付けされています。なぜIOストリームを使用していませんか? – Nim