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

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

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

NAS上のファイルの上書き保存が出来ない

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

■100614 / inTopicNo.1)  NAS上のファイルの上書き保存が出来ない
  
□投稿者/ ジェイド (3回)-(2022/09/30(Fri) 11:56:38)

分類:[Windows 全般] 

VisualStudio2015 VB.NET で開発しております。

アプリケーションサーバ(Windows Server 2012 R2)にあるプログラムからファイルサーバ(NAS)にファイルを上書きしようとすると
「システムエラーが発生しました。別のプロセスで使用されているため、プロセスはファイル"・・・・略・・・(パス情報)"にアクセスできません。」
というエラーメッセージが出ます。

ファイルの新規作成は問題なく行えています。

これが原因が分からなくて困っているのですが、同じような経験をされた方はおられないでしょうか。

些細なことでもいいので何かお気付きの方がおられたら教えてください。

以下の情報を聞いております。
・同じファイルを別のユーザーが同時に更新しようとしていることはない。
・直接、対象ファイルを開いているということもない。
・クライアントのマシンはWindows7 (関係ないかと思いますが・・・)

同じプログラムを他の環境でも使用しているのですが、そちらからは同様のエラーは発生しないようで
プログラムではなく、環境に依存する問題ではないかと思うのですが・・・
引用返信 編集キー/
■100616 / inTopicNo.2)  Re[1]: NAS上のファイルの上書き保存が出来ない
□投稿者/ kiku (294回)-(2022/09/30(Fri) 13:10:08)
No100614 (ジェイド さん) に返信
> VisualStudio2015 VB.NET で開発しております。
>
> アプリケーションサーバ(Windows Server 2012 R2)にあるプログラムからファイルサーバ(NAS)にファイルを上書きしようとすると
> 「システムエラーが発生しました。別のプロセスで使用されているため、プロセスはファイル"・・・・略・・・(パス情報)"にアクセスできません。」
> というエラーメッセージが出ます。

上記のように、別プロセスで使われているか?
もしくは、ファイル作成時に、ファイルを閉じずに終了しており、
ファイルが開きっぱなしの状態にあるかのどちらかのように思います。
引用返信 編集キー/
■100618 / inTopicNo.3)  Re[2]: NAS上のファイルの上書き保存が出来ない
□投稿者/ radian (97回)-(2022/09/30(Fri) 14:29:13)
とりあえず、どのプロセスがファイル掴んでいるかから調べてみてはどうでしょう。

[Process Explorerでファイルを掴んでいるプロセスを特定する]
http://sakusakuit.blog.fc2.com/blog-entry-118.html
引用返信 編集キー/
■100621 / inTopicNo.4)  Re[2]: NAS上のファイルの上書き保存が出来ない
□投稿者/ ジェイド (4回)-(2022/09/30(Fri) 16:44:20)
No100616 (kiku さん) に返信
kiku さん、ありがとうございます。

> 上記のように、別プロセスで使われているか?
> もしくは、ファイル作成時に、ファイルを閉じずに終了しており、
> ファイルが開きっぱなしの状態にあるかのどちらかのように思います。

その可能性も含めてコードを再検証したのですが、プログラムには問題が見当たりませんでした。

NASではなく、Windowsサーバーをファイルサーバーとしている環境ではどこも発生していないので
NASが原因ではないかと疑っているのですが・・・
もう一度確認してみます。
引用返信 編集キー/
■100622 / inTopicNo.5)  Re[3]: NAS上のファイルの上書き保存が出来ない
□投稿者/ ジェイド (5回)-(2022/09/30(Fri) 16:49:28)
radian さん、ありがとうございます。

> とりあえず、どのプロセスがファイル掴んでいるかから調べてみてはどうでしょう。
>
> [Process Explorerでファイルを掴んでいるプロセスを特定する]
> http://sakusakuit.blog.fc2.com/blog-entry-118.html

試してみたいのですが、現場が遠く、かつリモート接続が不可なため、すぐ検証出来ません。
現場に向かうことが出来たら試すようにしてみます。
引用返信 編集キー/
■100630 / inTopicNo.6)  Re[3]: NAS上のファイルの上書き保存が出来ない
□投稿者/ KOZ (324回)-(2022/10/03(Mon) 10:27:22)
No100621 (ジェイド さん) に返信
> NASではなく、Windowsサーバーをファイルサーバーとしている環境ではどこも発生していないので
> NASが原因ではないかと疑っているのですが・・・
> もう一度確認してみます。

NAS の情報が不明ですが、NAS が提供しているツールで使用状況が見られないでしょうか?
あるいは telnet で接続して情報が取れないでしょうか?

「Sambaサーバのアクセス状況を調べるには」
https://atmarkit.itmedia.co.jp/flinux/rensai/linuxtips/388acssamba.html

引用返信 編集キー/
■100636 / inTopicNo.7)  Re[4]: NAS上のファイルの上書き保存が出来ない
□投稿者/ ジェイド (6回)-(2022/10/04(Tue) 11:22:39)
KOZ さん

返信ありがとうございます。

> NAS の情報が不明ですが、NAS が提供しているツールで使用状況が見られないでしょうか?
> あるいは telnet で接続して情報が取れないでしょうか?
>
> 「Sambaサーバのアクセス状況を調べるには」
> https://atmarkit.itmedia.co.jp/flinux/rensai/linuxtips/388acssamba.html

すみません、現地に行かないとNASの確認は出来ない状況です。
情報ありがとうございます。現地に赴いた時は確認してみます。

すみません、話は変わるのですが、ソースを確認していたら怪しい箇所がありました。。。

VB.NET なのですが、ある関数内で、下記のようにFileStremに読み込んでいる処理がありましたが、Close していないように見えます。
この場合、ファイルは開きっぱなしにならないでしょうか・・・
(Using で括ってOpenするのが定石だと思っているのですが)

Dim fs As New IO.FileStream(strPath, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.ReadWrite)
fs.Seek(lngOffset, IO.SeekOrigin.Begin)
intReadBytes = CUInt(fs.Read(bytBuffer, 0, bytBuffer.Length))
Return True

それとも関数から抜ける時に自動的に閉じてくれたりするのでしょうか・・・
引用返信 編集キー/
■100637 / inTopicNo.8)  Re[5]: NAS上のファイルの上書き保存が出来ない
□投稿者/ KOZ (325回)-(2022/10/04(Tue) 11:35:36)
No100636 (ジェイド さん) に返信
> それとも関数から抜ける時に自動的に閉じてくれたりするのでしょうか・・・
閉じられません。
作成された FileStream を GC が回収するとき閉じられます。
引用返信 編集キー/
■100638 / inTopicNo.9)  Re[6]: NAS上のファイルの上書き保存が出来ない
□投稿者/ ジェイド (7回)-(2022/10/04(Tue) 11:52:24)
KOZ さん

早速の返信ありがとうございます。

> 閉じられません。
> 作成された FileStream を GC が回収するとき閉じられます。

そうですよね。すみません、よく見ると当関数を呼び出している箇所が見当たらないようで
それを含め、類似箇所がないか確認しております。

やはりNASではなく、プログラムに問題があるように感じてきました。
お騒がせして大変申し訳ございません。
引用返信 編集キー/
■100642 / inTopicNo.10)  Re[7]: NAS上のファイルの上書き保存が出来ない
□投稿者/ HattariB (33回)-(2022/10/04(Tue) 14:54:04)
Windowsサーバーで動いているのはなぜなのか?
不思議。
引用返信 編集キー/
■100648 / inTopicNo.11)  Re[7]: NAS上のファイルの上書き保存が出来ない
□投稿者/ radian (99回)-(2022/10/05(Wed) 09:19:19)
No100638 (ジェイド さん) に返信
> やはりNASではなく、プログラムに問題があるように感じてきました。
> お騒がせして大変申し訳ございません。

とりあえず、Disposeメソッドがあるクラスは、Usingして使うくせをつけると
解放やクローズ忘れはなくなると思います。

[第5回 Usingステートメントで簡単、確実にファイルをクローズ]
https://atmarkit.itmedia.co.jp/fdotnet/vb2005/vb2005_05/vb2005_05_01.html

引用返信 編集キー/
■100659 / inTopicNo.12)  Re[8]: NAS上のファイルの上書き保存が出来ない
□投稿者/ ジェイド (8回)-(2022/10/11(Tue) 10:42:38)
すみません、遅くなりました。ご返信ありがとうございます。

■HattariBさん
上に記述したコードですが、API用で作成したコードで実際にメインの処理からは呼び出しされていないという状況でした。
主処理ではUsing を使用していない箇所が何点かあるんですが、Windowsサーバーでは問題なく実行出来ています。

■radian さん
> とりあえず、Disposeメソッドがあるクラスは、Usingして使うくせをつけると
> 解放やクローズ忘れはなくなると思います。
>
> [第5回 Usingステートメントで簡単、確実にファイルをクローズ]
> https://atmarkit.itmedia.co.jp/fdotnet/vb2005/vb2005_05/vb2005_05_01.html

そうですよね、自分も今からコーディングするのならUsing で実装すると思います。
ありがとうございます。

当現象なのですが、現地確認を行うのは大分先になりそうなので解決はしていないのですが、解決済みとさせてください。
お騒がせして申し訳ございませんでした。
解決済み
引用返信 編集キー/
■100662 / inTopicNo.13)  Re[9]: NAS上のファイルの上書き保存が出来ない
□投稿者/ HattariB (34回)-(2022/10/11(Tue) 23:22:24)
No100659 (ジェイド さん) に返信

解決していないのに解決済みになさるってのは、釈然としないものが沸くんですけど、お忙しいのでしょうからしかたないんでしょうね。

で、最後におひとつ伺いたいのですけど、
ファイル共有
は、設定してないんですよね。

共有されたファイルなら、クローズしなくても他からアクセスできるし、
nasでよく使われてるサンバと、ウィンドウズ鯖では、ファイル共有のコンセプトが違ってたと思うので、
ウィンドウズサーバー相手だと、正常動作しているように"見える"。
NAS相手だと新規ファイルはうまくいくけど、既存のファイルが開かれっぱなしだから開けない。

っつー理由に当てはまりそうな気がすんですけど、どーっすかね。

ま、私の想像なもんですから、お目汚しだったという事で、スルーしてくださいな。



> すみません、遅くなりました。ご返信ありがとうございます。
>
> ■HattariBさん
> 上に記述したコードですが、API用で作成したコードで実際にメインの処理からは呼び出しされていないという状況でした。
> 主処理ではUsing を使用していない箇所が何点かあるんですが、Windowsサーバーでは問題なく実行出来ています。
>
> ■radian さん
>>とりあえず、Disposeメソッドがあるクラスは、Usingして使うくせをつけると
>>解放やクローズ忘れはなくなると思います。
>>
>>[第5回 Usingステートメントで簡単、確実にファイルをクローズ]
>>https://atmarkit.itmedia.co.jp/fdotnet/vb2005/vb2005_05/vb2005_05_01.html
>
> そうですよね、自分も今からコーディングするのならUsing で実装すると思います。
> ありがとうございます。
>
> 当現象なのですが、現地確認を行うのは大分先になりそうなので解決はしていないのですが、解決済みとさせてください。
> お騒がせして申し訳ございませんでした。
解決済み
引用返信 編集キー/
■100679 / inTopicNo.14)  Re[10]: NAS上のファイルの上書き保存が出来ない
□投稿者/ ジェイド (9回)-(2022/10/13(Thu) 14:43:03)
HattariB さん

> 解決していないのに解決済みになさるってのは、釈然としないものが沸くんですけど、お忙しいのでしょうからしかたないんでしょうね。

自分もそう思ったのですが・・・現地調査がすぐ出来ない点がございまして大変申し訳ありません。

> で、最後におひとつ伺いたいのですけど、
> ファイル共有
> は、設定してないんですよね。

ここもわかりません。
前任者に聞いたのですが、NASの設定は別の業者が担当したらしく、内容を把握していないとのこと・・・

> 共有されたファイルなら、クローズしなくても他からアクセスできるし、
> nasでよく使われてるサンバと、ウィンドウズ鯖では、ファイル共有のコンセプトが違ってたと思うので、
> ウィンドウズサーバー相手だと、正常動作しているように"見える"。
> NAS相手だと新規ファイルはうまくいくけど、既存のファイルが開かれっぱなしだから開けない。

すみません、私はこの辺りの知識が乏しいのですが、ファイル共有というのはNASの設定なのでしょうか。

該当ファイルは、システム専用フォルダ内に配置しており、もし他のユーザーが入ったとしても
ファイルを開くことはないかと思っています。
理由はファイル自体が本来のファイル名と別名になっており、かつ拡張子なしのため、エクスプローラー上から
判断することは不可能な状態です。

ファイル共有の設定をしていれば、NASがファイルを捕まえてしまっているということがあるということでしょうか?
引用返信 編集キー/
■100685 / inTopicNo.15)  Re[11]: NAS上のファイルの上書き保存が出来ない
□投稿者/ HattariB (36回)-(2022/10/13(Thu) 22:09:21)
「ファイル共有」をご存じなかったとは思っていませんでした。すみません。

ファイル共有しないと、どのように動作するのかは、わざわざ出かけなくても実験する事ができます。

お使いのOSがwindows10だと仮定して、

@任意の読み書き可能なディレクトリを、ファイルエクスプローラーで開く。
Aファイル上でもなく、フォルダ上でもない場所にマウスカーソルを移動させて、右クリックする。
B新規作成コマンドの、サブメニューから、テキストドキュメントを選んで、ファイルを作成する。
Cできたファイル上で右クリックして、プログラムから開くコマンドのサブメニューからメモ帳を選択する。
 →メモ帳でファイルが開く。
Dできたファイル上で右クリックして、プログラムから開くコマンドのサブメニューからワードパッドを選択する。
 →ワードパッドでファイルが開く。
Eワードパッド上でhogeと入力する。まだ保存しない。
Fメモ帳上でpiyoと入力する。まだ保存しない。
Gメモ帳で開いてpiyoと入力したファイルを保存する。プログラムは閉じない。
Hワードパッドで開いてhogeと入力したファイルを保存する。プログラムは閉じない。
Iほかのエディタ(WordでもexcelでもVSCodeでも良い)で保存したファイルを開く。

さて、開いたファイルにはどちらが保存されていたでしょうか。

hogeかpiyo(おそらくhoge)のどちらかしか保存されていないはずです。

つまり、ファイル共有なしに複数から書き込み可能モードで開くと、
最後に保存した結果が反映されるだけで、最初に保存したはずの内容は消えてしまいます。

ここまではご理解できてますよね。
※っつか、試されているような気がする。

お返事お待ちしています。

引用返信 編集キー/
■100691 / inTopicNo.16)  Re[12]: NAS上のファイルの上書き保存が出来ない
□投稿者/ KOZ (327回)-(2022/10/14(Fri) 13:59:36)
2022/10/14(Fri) 14:00:07 編集(投稿者)

No100685 (HattariB さん) に返信

あ、なるほど

No 100636 を見ると

Dim fs As New IO.FileStream(strPath, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.ReadWrite)

で開いていますね。(ここは通らないようですが)

他の場所で同じようにしていた場合、

Dim fs2 As New IO.FileStream(strPath, IO.FileMode.Create, IO.FileAccess.Write, IO.FileShare.ReadWrite)

Windows だと、これで上書きできちゃいますが、NASだと出来ないかもしれない、ということですか。
引用返信 編集キー/
■100692 / inTopicNo.17)  Re[13]: NAS上のファイルの上書き保存が出来ない
□投稿者/ HattariB (38回)-(2022/10/14(Fri) 19:26:57)
No100691 (KOZ さん) に返信

> Windows だと、これで上書きできちゃいますが、NASだと出来ないかもしれない、ということですか。

ぁ、そうです。
■100662 で言いたかったのはこれです。っつーか、
■100685に致命的な間違いがあったのにも関わらず、それをするーなすった上で、
お返事いただけたのはありがたいです。

情けなくって恐縮ですが、せっかくなんで、訂正がてら、続きを書きますね。

誤:ファイル共有なしに複数から書き込み可能モードで開くと、
正:ファイル共有「ありで」複数から書き込み可能モードで開くと、

すみませんでした。ごめんなさい。


で、訂正したうえで続きを書きますね。

サクラエディタをご用意ください。
オイラが知ってる「無料で多くのユーザーが居て、排他モードでっファイルを開けるエディタ」です。
※排他モードで開ければなんでも良いです。
windows10での動作です。

J @〜Iで使用したファイルを、サクラエディタで開く。
Kサクラエディタの設定メニューから、共通設定コマンドを選んで、表示されたダイアログの
ファイルタブを選択して、排他制御項目を「上書を禁止する」にして、
OKボタンをクリックして、設定ダイアログを閉じる。
まだサクラエディタは閉じないでください。
L同じファイルをメモ帳で開く。
Mメモ帳でfugaと入力する。
Nメモ帳で保存する。
保存しますか?アラートが出るので、保存するを選ぶ。
Oすでに存在します。上書きする?アラートが出るので、はいを選ぶ。

→どうなったでしょうか?そのままでは保存できませんよね。

■100614 で書いてくださった状況に似ていると思います。

この現象が出ているのではないかと思いました。


さて、
A.共有状態で開いているなら、閉じていなくても他のプロセスが書き込めますし、
B.排他モードで開いているなら、他のプロセスは書き込めません。

これはネットワークストレージに保存されているファイルであっても同じです。
ここまでも良いでしょうかね。
※長文だと迷惑投稿者になるので、いったんカキコしますね。



















引用返信 編集キー/
■100693 / inTopicNo.18)  Re[14]: NAS上のファイルの上書き保存が出来ない
□投稿者/ HattariB (39回)-(2022/10/14(Fri) 19:48:40)
■100692の続き

んで、このスレで言う処のNASってのは、
「windows server(NT含む)」以外で稼働しているNASだと仮定しています。

NASはwindows serverでは無いので、windows serverで動作している環境が、NASの環境に変わったとき、
どこに不具合が発生するのかは予想できないですね。

原因を探る必要があるのなら、NASのメーカーに協力してもらった方が良いですね。
システムを、NASで動作するように作り変えるのも選択肢の一つだと思います。

マイクロソフトの開発環境は、NASでの動作を保証していないと認識しているので、
挙動が違っていたとしても、少なくともマイクロソフトのせいではありません。

オイラ的には、どこかで排他モードで開きっぱなしのプロセスが、ゾンビみたいに動いてるのではないかと想像しています。

おわり。

引用返信 編集キー/
■100699 / inTopicNo.19)  Re[15]: NAS上のファイルの上書き保存が出来ない
□投稿者/ ジェイド (10回)-(2022/10/15(Sat) 23:31:29)
HattariBさん
KOZさん

すみません、また遅くなりました。。。

お客様からは、NASに変更する前(WindowsServer)では起こっていなかったと思う、NASに変えてから起こってる可能性が高いと言われています。
その間で、システムの変更はしていないのですが、前任者からはシステムに不具合が紛れ込んでいる可能性があるから徹底的に調べて・・・
という状況になっていて今に至ります。

とりあえず、全て Using に変更する方向で対応するようになっています。
近々変更したモジュールを送付して更新する予定なのですが、これでも再現するようであればますますNASを疑うしかないですよね。

また結果はご報告させてください。
以上、失礼致します。
引用返信 編集キー/

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


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

このトピックに書きこむ