- - PR -
iniファイル読込でエラー
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-03-29 11:44
VB.NETで開発したプログラムAとプログラムBが1つのiniファイルを使用しています。
A,Bとも起動は非同期なのですが、ときどきこのiniファイル読込処理で異常が発生してしまいます。 ログを見ているとAとBが同時に起動された場合に起きているような気がするのですが、 以下のようなファイルOPEN、CLOSEをした場合に同時OPENによるエラーが発生すること がありえるでしょうか。 --- 以下ロジック strFullPath = Application.StartupPath & "\KYTsystem.ini" '' 初期設定ファイルが存在しない時、 If Dir(strFullPath, FileAttribute.Normal) = "" Then '' 戻り値の設定 InitInfo_Get = False End If '' 初期設定ファイルオープン intFileNo = FreeFile() FileOpen(intFileNo, strFullPath, OpenMode.Input) -- 中略 UNTIL文でファイル内容を読み込む -- FileClose(intFileNo) | ||||
|
投稿日時: 2004-03-29 11:51
FileOpen関数のマニュアルを読み直してみてください。
共有ロックのオプションが無指定なので、デフォルトのLockReadWriteが使われています。 | ||||
|
投稿日時: 2004-03-29 13:32
Jittaさん、ありがとうございます。
> 共有ロックのオプションが無指定なので、デフォルトのLockReadWriteが使われています。 FileOpen関数を確認してみたのですが、 ------ Share 省略できます。開くファイルに対するほかのプロセスからのアクセスを制御する、Shared、Lock Read、Lock Write、または Lock Read Write のいずれかの列挙 (Enum) 型です。既定値は Shared です。 ------ と、既定値は「Shared」となっているようなのですが。。。 今回のように複数のプログラムから1つのファイルを読む場合は "Access"をReadに、"Share"をSharedに明示的に設定すべきなのでしょうか。 | ||||
|
投稿日時: 2004-03-29 13:37
これはヘルプのどこからの引用でしょうか?? VB.NET/.NET Frameworkのバージョンは? http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vblr7/html/vastmOpen.asp Visual Basic 言語リファレンス の FileOpen 関数の引数Shareの説明によると > Share > 省略できます。開くファイルに対する他のプロセスからのアクセスを制御する、Shared、 > Lock Read、Lock Write、または Lock Read Write のいずれかの列挙 (Enum) 型です。 > 既定値は Lock Read Write です。 とあり、既定値はLock Read Write とありますけど・・・。 | ||||
|
投稿日時: 2004-03-29 14:07
よねKENさん、ありがとうございます。
> これはヘルプのどこからの引用でしょうか?? > VB.NET/.NET Frameworkのバージョンは? 私のパソコンのVisual Studio .NETを起動して、ヘルプにてFileOpen関数を表示するとそのような記述が出てきます。 バージョンは Development Environment2002 Version7.0.9486 Microsoft .NET Framework 1.0.3705 です。 どこかのバージョンから変わったのでしょうか? ところで、このオプションが ReadLockWriteになっていれば他の処理がファイルオープン中はエラーになり、 Sharedになっていれば複数の処理から1ファイルを同時に開ける、ということ で問題ないでしょうか? | ||||
|
投稿日時: 2004-03-29 14:19
???変わったんですかねぇ???構文説明のところでは、OpenShare.Defaultとなっているので、「デフォルトってなんだぁ!」な気分ですが。。。 Sharedを明示的に指定すれば、複数からのアクセスも、処理できるでしょう。 ところで、この関数は下位互換の為にあるので、新規に作成しているアプリケーションなら、System.IO.Streamクラスからの派生クラスを使用されることを、おすすめします。 | ||||
|
投稿日時: 2004-03-29 14:28
Jittaさん、よねKENさん、ありがとうございます。
バージョンにより変わっているのかどうか、というのは謎ですが とりあえず明示的にSharedを指定して回避いたします。 System.IO.Streamクラスの使用も検討してみます。 ありがとうございました。 | ||||
|
投稿日時: 2004-03-29 17:19
VS.NET 2002のヘルプでは、「既定値は Shared」
VS.NET 2003のヘルプでは、「既定値は Lock Read Write」 となっているようです。 |
1|2|3
次のページへ»