| 分類:[.NET 全般]
環境 C# WindowsFormアプリ
Move中にファイルをオープンする場合にどんな例外が発生する可能性がありますでしょうか?
アプリ1(PC1)では、下記のようにローカルフォルダにあるcsvファイルを PC2の共有フォルダに、拡張子tmpでコピーしてから、 tmpからcsvへリネーム(move)しています。
一方、PC2で動作しているアプリ2では、 PC2上にある共有フォルダ内にあるCSVファイルを リードしている状況になります。 このリード中に例外が発生しましたが、 例外を握り潰していたため、どんな例外が発生したかは わからない状況です。 どんな例外が発生する可能性があるでしょうか?
1日に1回程度発生し、どうして発生するかわからない状況です。 通常は問題なくファイルオープンできているため、 リネーム中にファイルをオープンすると発生することがあるのでは ないかと想像していますが 例外を握り潰しているため、詳細がわかりません。
理論上、どんな例外が発生するでしょうか? 当方では発生しないはずとしてコーディングしています。
●アプリ1 string DIR = Path.Combine("PC1のローカルフォルダのパス", "csv"); var localfile = Directory.GetFiles(DIR, "*", SearchOption.TopDirectoryOnly); var filelist = localfile.Where(x => Regex.IsMatch(Path.GetFileName(x), @"^.*\.csv$", RegexOptions.IgnoreCase)); filelist.OrderBy(x => x); foreach(var f in filelist) { var filename = Path.GetFileNameWithoutExtension(f); var tmpfilename = Path.Combine("PC2の共有フォルダのパス", filename + ".tmp"); var csvfilename = Path.Combine("PC2の共有フォルダのパス", filename + ".csv"); try { File.Copy(f, tmpfilename, true); if (File.Exists(csvfilename)) { continue; } File.Move(tmpfilename, csvfilename); File.Delete(f); } catch (Exception ex) { continue; } }
●アプリ2 var localfile = Directory.GetFiles("PC2の共有フォルダのパス", "*", SearchOption.TopDirectoryOnly); var filelist = localfile.Where(x => Regex.IsMatch(Path.GetFileName(x), @"^.*\.csv$", RegexOptions.IgnoreCase)); filelist.OrderBy(x => x); foreach(var f in filelist) { try { var ret = Read_f(f); if (!ret) { throw new Exception("ファイル読取エラー"); } } catch (Exception ex) { ●ここで例外発生したが、Exceptionを握り潰していたためどんな例外かわからない。 } }
private void Read_f(string filename) { using (var sr = new StreamReader(filename, Encoding.UTF8)) { while (!sr.EndOfStream) { var line = sr.ReadLine(); } sr.Close(); } }
|