C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

vc++のfopenで排他処理をしない。

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■93112 / inTopicNo.1)  vc++のfopenで排他処理をしない。
  
□投稿者/ sige (1回)-(2019/11/21(Thu) 14:18:05)

分類:[C/C++] 

vc++2019でfopen(fp,"filename.txt","w")で長時間間欠的に書き込みをおこなっているとき、
エクスプローラやコマンドプロンプトで他のファイルにコピーをしようとしたとき、他のプロセスで使用中なので不可となります。
排他処理が有効になっているようです。windows10。コマンドプロンプトからのコンパイル実行です。
もちろん書き込み中のファイルに別なプロセスから書き込みを行う等は考えず、単に実行中のファイルの内容を確認するためにコピーをしたいのです。
ちなみに、gfortranなどでは同様のことはできます。この場合、書き込み中のファイルに異常がでたりはなく動作を継続できています。
vc++2019でコピーだけを可能にする方法はないでしょうか。

引用返信 編集キー/
■93114 / inTopicNo.2)  Re[1]: vc++のfopenで排他処理をしない。
□投稿者/ Hongliang (919回)-(2019/11/21(Thu) 14:59:07)
fopenの代わりに、_fsopenを使います。
https://docs.microsoft.com/ja-jp/cpp/c-runtime-library/reference/fsopen-wfsopen?view=vs-2019
docsの日本語が割とめちゃくちゃなので補足しておくと、shflagに指定する値が定義されているのはshare.hで、各定数は_SH_DENYで始まるものです。
コピーしたいのなら_SH_DENYNO(読み書きを許可)か_SH_DENYWR(読み込みを許可)を指定します。
引用返信 編集キー/
■93118 / inTopicNo.3)  Re[2]: vc++のfopenで排他処理をしない。
□投稿者/ sige (2回)-(2019/11/21(Thu) 17:48:52)
No93114 (Hongliang さん) に返信

早速のご返事ありがとうございます。
_fsopenがあるのですね。
こんなのがあるとは、偶然に発見しない限り知りようがなかったです。何かあるのではと思いましたが、共有に気がつきませんでした。


引用返信 編集キー/
■93119 / inTopicNo.4)  Re[3]: vc++のfopenで排他処理をしない。
□投稿者/ sige (3回)-(2019/11/21(Thu) 17:49:51)
No93118 (sige さん) に返信
> ■No93114 (Hongliang さん) に返信
>
> 早速のご返事ありがとうございます。
> _fsopenがあるのですね。
> こんなのがあるとは、偶然に発見しない限り知りようがなかったです。何かあるのではと思いましたが、共有に気がつきませんでした。
>
>
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ