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

わんくま同盟

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

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


■86487 / )  どんな例外が考えられるか
□投稿者/ kiku (23回)-(2018/02/05(Mon) 20:29:36)

分類:[.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();
            }
        }


返信 編集キー/


管理者用

- Child Tree -