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

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

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

Re[5]: BinaryReaderについて


(過去ログ 87 を表示中)

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

■51725 / inTopicNo.1)  BinaryReaderについて
  
□投稿者/ yu (1回)-(2010/07/15(Thu) 08:59:36)

分類:[.NET 全般] 

2010/07/15(Thu) 09:10:26 編集(投稿者)
2010/07/15(Thu) 09:10:12 編集(投稿者)

VB.NET 2008
Windows XP

バイナリーデータを開く処理をタスクスケジューラーにて行っております(毎時)
そこで、ログを確認すると、下記メッセージが発生していました。

”別のプロセスで使用されているため、プロセスはファイル 'ファイル名' にアクセスできません。”

原因である別プロセスを調べるのが一番だと思いますが、諸事情により困難な為、他案で回避することとしました。
現在のプログラムは下記コードでファイルを開いています。FileShare.ReadWriteをつけましたがやはりロックが発生します。

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Dim fs As System.IO.BinaryReader = Nothing
fs = New System.IO.BinaryReader(IO.File.Open("ファイル名", IO.FileMode.Open))
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

試しにテスト的にロックを起こそうと思い、開き元がFileStream、StreamReader、またはFileSystem.FileOpenでオープンさせ、
その後、BinaryReader(OpenShare.Shared付き)ですると開きましたが、元がBinaryReader(OpenShare.Shared無し)で、
BinaryReader(OpenShare.Shared付き)や、FileStream、StreamReader、またはFileSystem.FileOpenすると開きません。

やはりロックしているプロセスが、BinaryReader(OpenShare.Shared無し)だと、開く事が不可能なのでしょうか?

以上、宜しくお願いします。
引用返信 編集キー/
■51726 / inTopicNo.2)  Re[1]: BinaryReaderについて
□投稿者/ yu (2回)-(2010/07/15(Thu) 09:00:26)
2010/07/15(Thu) 09:11:27 編集(投稿者)

補足です。
本番実施端末はWindows2008 R2になります。
引用返信 編集キー/
■51731 / inTopicNo.3)  Re[2]: BinaryReaderについて
□投稿者/ Mira (5回)-(2010/07/15(Thu) 09:57:30)
yuさんのやりたいことは
他のプロセスがファイルをロックしている状況で
なんとかしてBinaryReaderでファイルを開きたいってことでいいです?

出来ないって100%言い切れないのですが
それがもし出来るならロックの意味がなくなってしまいますね

ロックを強制的に解除するかロックが解除されるまで処理を待つかするしかないと思います
引用返信 編集キー/
■51732 / inTopicNo.4)  Re[1]: BinaryReaderについて
□投稿者/ オショウ (544回)-(2010/07/15(Thu) 10:05:12)
> バイナリーデータを開く処理をタスクスケジューラーにて行っております(毎時)
> そこで、ログを確認すると、下記メッセージが発生していました。

  タスクスケジューラで起動したそのプロセスは、1回目は正常に動作し
  2回目以降競合してNG・・・と言うことですか?
  それとも1回目でNG?

  要は1時間毎に起動するそのアプリが正常に終了していない。もしくは
  ファイルハンドルを開きっぱなしにしている・・・と言う単純な問題で
  はないのでしょうか?

※ あと、1回目でNGならば、そのファイルのあるフォルダやそのファイ
  ルへのアクセス権限はどうなっていますか?
  タスクスケジューラに登録するそのアプリは、どのようなユーザー権限
  で動作する設定になっているのでしょうか・・・

  その辺、ご確認下さい。

以上。参考まで
引用返信 編集キー/
■51736 / inTopicNo.5)  Re[2]: BinaryReaderについて
□投稿者/ yu (3回)-(2010/07/15(Thu) 11:53:42)
>yuさんのやりたいことは
>他のプロセスがファイルをロックしている状況で
>なんとかしてBinaryReaderでファイルを開きたいってことでいいです?

⇒Miraさん回答ありがとうございます。
 おっしゃる通りで、なんとか開きたいんです。
 根本的な問題として、プロセスロックを行っているプロセスがなんなのかを割り出すのが先決ですが、
 その方法も不明でして、、、
 現在、ロックが発生したら、リトライ処理を入れています(あまり好ましくないですが。。)

 ちなみにロックを強制的に解除する方法とはどのようにするのでしょうか?
引用返信 編集キー/
■51737 / inTopicNo.6)  Re[3]: BinaryReaderについて
□投稿者/ yu (4回)-(2010/07/15(Thu) 12:00:30)
オショウさん回答ありがとうございます。

finally内に、開いていたら開放する処理をいれていまして、
2回目以降競合してNGとはなっておりませんでした。

タスクスケジューラーでの実行ユーザーはアドミン権限を持たせています。
権限でしたらずっと出ると思いますので、別要因かと推測しました。
引用返信 編集キー/
■51740 / inTopicNo.7)  Re[4]: BinaryReaderについて
□投稿者/ Mira (6回)-(2010/07/15(Thu) 13:03:10)
共有フォルダ内のファイルって前提ですけどいいです?

NetFileEnum,NetFileCloseあたりでどうでしょうか?
ただ2008Serverで動作するかは知らないですが

確認なのですがタスクで動かしているプログラム内では
問題となっているBinaryReaderのコード以外で対象のファイルを操作したりしてますか?
コード上ではBinaryReaderのコードに到達する前にファイルは閉じられていることになっていても
実行する時非同期(って表現でいいのかな)ですとBinaryReaderの処理が前段の処理を追い越して
エラーが発生しているということもあります

仮に原因がこれだったとして共有ロックを解除してしまうと
前段の処理に影響が出たりとかしますので念のために
引用返信 編集キー/
■51741 / inTopicNo.8)  Re[5]: BinaryReaderについて
□投稿者/ yu (5回)-(2010/07/15(Thu) 13:16:47)
2010/07/15(Thu) 15:32:33 編集(投稿者)

No51740 (Mira さん) に返信
> 共有フォルダ内のファイルって前提ですけどいいです?
>
> NetFileEnum,NetFileCloseあたりでどうでしょうか?
> ただ2008Serverで動作するかは知らないですが
>
> 確認なのですがタスクで動かしているプログラム内では
> 問題となっているBinaryReaderのコード以外で対象のファイルを操作したりしてますか?
> コード上ではBinaryReaderのコードに到達する前にファイルは閉じられていることになっていても
> 実行する時非同期(って表現でいいのかな)ですとBinaryReaderの処理が前段の処理を追い越して
> エラーが発生しているということもあります
>
> 仮に原因がこれだったとして共有ロックを解除してしまうと
> 前段の処理に影響が出たりとかしますので念のために

Miraさん回答ありがとうございます。


Dim fs As System.IO.BinaryReader = Nothing
fs = New System.IO.BinaryReader(IO.File.Open("ファイル名", IO.FileMode.Open))
上記、fsにて、ファイル内のデータを取得し、別配列に格納し fs.closeしています。
他で、ファイル操作を行っているコードはありません。上記のみです。

なるほど、こういう関数もあるんですね。勉強になります。
テスト的に行ってみたいと思います。
ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -