これと同じような問題は他の関数でFILE構造体へのポインタを持って行って
openしたのに「あれっ?」というのに似てるな

void func(FILE *fp)
{
...fpをopenする処理
}

func()から戻ってもfpに代入されたFILE構造体がopenされてない
(正確にはfunc()内でopenして代入した値がどこかで遊んでいる)

正しくは

void func(FILE **fp)
{
*fp=fopen(////
}

とやるかC++なら
void func(FILE *&Fp)

まあこんなアホな書き方は普通しないけど