表題通りで、エラーが吐かれないので困っています。
下記で読み終わった画像ファイルを for ループ内で連続削除しようとしています。何らエラーメッセージを出すことなくアプリが落ちてしまいます。
どのように対処したらいいですか?エラーを吐かせる方法がありますでしょうか?
Windows10 C# WPF VS2019
FileMei は、画像ファイルのパス・・fileMmei、画像ファイルにバーコードがあり読みの為に切り取って保存している・・・cloneMei
C#
1public class FileMei 2{ 3 public string fileMmei, 4 cloneMei; 5 public FileMei(string _fileMei, string _cloneMei) 6 { 7 this.fileMmei = _fileMei; 8 this.cloneMei = _cloneMei; 9 } 10} 11 12List<FileMei> fileList = new List<FileMei>();
fileListは、元画像のパスとバーコード部分を切り取ったファイルパスが、30件から50件程度入っている。
ZXing でバーコードを読んだ後、下記で削除しようとしています。
ZXing のコードは、今回提示していません。(下記のDelete 部分をコメントにして実行すると正しく終わるため)
C#
1for (int h = 0; h < fileList.Count; ++h) 2{ 3 string cloneMei = fileList[h].cloneMei; 4 5 try 6 { 7 FileInfo fileInfo = new FileInfo(cloneMei); 8 // 削除するファイルの読み取り専用属性を確認 9 if ((fileInfo.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) 10 { 11 // 読み取り専用属性を削除 12 fileInfo.Attributes &= ~FileAttributes.ReadOnly; 13 } 14 15 int errNum = System.Runtime.InteropServices.Marshal.GetLastWin32Error(); 16 if(errNum != 0) 17 { 18 MessageBox.Show(""); <- ここには来ない! 19 } 20 21 fileInfo.Delete(); <- ここで強制的に終了する 22 } 23 catch (Exception ex) 24 { 25 MessageBox.Show(ex.Message); 26 }
追記
C#
1File.AppendAllText(@"testLog.TXT", "0 : "+ fileInfo.FullName + "\n"); 2 3fileInfo.Delete(); 4 5File.AppendAllText(@"testLog.TXT", "1 : "+ fileInfo.FullName + "\n"); 6
のようにしてログを書き出し下記のようになってました。情報が小出しのようになりますが、最初から下記のように初めの2、3件は消えてます。Debug で追っかけてもそのぐらいで落ちてしまいます。
Log
10 : \LANDISK-610775\DeliveryList\IraishoSakuseiScan\20210908144132990_0020_MonoBlk.JPG 21 : \LANDISK-610775\DeliveryList\IraishoSakuseiScan\20210908144132990_0020_MonoBlk.JPG 30 : \LANDISK-610775\DeliveryList\IraishoSakuseiScan\20210908144132990_0021_MonoBlk.JPG 41 : \LANDISK-610775\DeliveryList\IraishoSakuseiScan\20210908144132990_0021_MonoBlk.JPG 50 : \LANDISK-610775\DeliveryList\IraishoSakuseiScan\20210908144132990_0022_MonoBlk.JPG
[見落としがあったので削除]
まず、どのファイルを処理しようとした時に落ちるのかログを出して確認して、ファイルが特定できればシンプルにそのファイルの削除ができるか検証して、同じ現象が発生するなら他のロジックの影響を考慮しなくて良くなるんで、そのファイル自体に何らかの問題があるのだろう、というところまで絞り込めるのでは。
問題を一気に特定しようとするのではなく、影響範囲をもっと絞り込んだ方が良い。
画像ファイルの置き場所のファイルシステムはNTFSですか?
画像の置き場所は、LAN DISK になります。IOデータのHDL2-AH2.0 ですが、フォーマット形式を調べる方法がわかりませんでした。NTFS だと思ってましたけど確認できていません。
> ログを出して確認
Delete() のタイミングでファイル名を書き出しましたが、削除実行時に落ちています。
特にエラーがないのでわかりませんでした。元質問欄を修正して書き足しました。
Delete()実行とともExceptionの捕捉無しに落ちているのであれば、ネットワークドライブ下のファイルに手を出しているので、.NET実行環境で拾えない致命的エラーになっているのかもですね。
アプリでエラーを捕捉できていなければ、Windowsのイベントログに何かエラーが報告されているかもしれません。
古いSambaだと例外が出ないトラブルはありがちでしたね。
対処としてはNASのファームのアップデートしてみたり、
NAS自体を変えてみたり、
ファイルシステムを変えてみるとかかな?
いずれにしてもソフト面からは対処不可かも?
特定のファイルで落ちるのではなく、複数のファイルを扱った際にランダムで落ちる(今の質問欄に掲載している以外のファイル・フォルダでも同様の現象が再現する)、という認識で間違いないのなら、検証をした方法を含めて明確に質問欄に記載したほうが良い。(現状そこまで読み取れない)
色々アドバイスいただきありがとうございます。
アプリは、不要なファイルの削除を不要になったタイミングで行おうとしていますが現状、何らかの不具合があるようです。見つけるすべがわからないので別の手段などを検討してみます。
> 複数のファイルを扱った際にランダムで落ちる
現状ではその認識です。
回答2件
あなたの回答
tips
プレビュー