2017-08-15 20 views
0

main.c関数とその中で呼び出されるサブ関数があります。サブ関数では、私はCreateFileを使ってファイルを作りました。次に、CloseHandleを使用して、そのファイルのハンドルを閉じます。それ以降(サブ関数内で)fopen_sを使用すると、読み取りと書き込みの両方のモードで動作します。しかし、後でmain関数にfopen_sを使用すると、私は読み取りアクセスでしか開くことができない、そうでなければエラーコード13が返されます - 許可が拒否されました。C - fopen_sは、CreateFileによって作成されたファイルに書き込めません。

hAppend = CreateFile(centralDataFilepath, // open central data file 
       FILE_APPEND_DATA,   // open for writing 
       FILE_SHARE_READ|FILE_SHARE_WRITE,  // allow multiple readers 
       NULL,      // no security 
       OPEN_ALWAYS,    // open or create 
       FILE_ATTRIBUTE_NORMAL, // normal file 
       NULL);     // no attr. template 

そして、次のように私はfopen_sを使用します:次のように私のCreateFile関数のパラメータは、

FILE *f2; 
errno_t errorCode3 = 0; 
errorCode3 = fopen_s(&f2, centralDataFilepath, "a+"); 
fclose(f2); 

のCreateFileはこれを行うには何も持っている場合、私は実際には知らないが、それはのように思えますサブ関数を終了すると、ファイルのアクセス権が変更されますか?私はこのファイルに書き込めるようにする必要があります。なぜ誰かがこの許可を拒否された理由を知っていますか?それを修正する方法は?

+1

'CreateFile'を使用した場合、なぜ' WriteFile'関数も使用しないのですか? –

+1

コードを記述しないでください。そのコードを表示し、動作しないコードを表示します。これを読んでください:[mcve]とこれ:[ask]。 –

答えて

2

としてはhereを説明:fopen_s_wfopen_sによって開かれる

ファイルが共有可能ではありません。

書き込みのためにファイルをロックできないため、関数が失敗しました。代わりに_fsopenを使用する必要があります。これを試してみてください:

f2 = _fsopen(centralDataFilepath, "a+", _SH_DENYNO); 
+0

_fsopenはタグ "r"を使用しても "r +"で更新するのではなく、まだ何らかの共有問題のようです。何か案は? – Chaz

+0

@Chaz:この問題をテストしました。最初に 'CreateFile'を呼び出して、同じファイルに対して' _fsopen' "r +"を呼び出します。うまくいきます。あなたのコードを共有してください。動作しません。 –

関連する問題