2016-11-03 10 views
0

ファイルが空であるかどうかを確認してから、「テキストが空です」などの文書を文書に書き込んでみます。プロセスはファイルライターを使用してファイルにアクセスできません

しかし、私は私が書き込みした後、ファイルを閉じていていても、別のプロセス

で使用されているため、プロセスはファイルにアクセスできません

を得るかいつでも。

私はここで何が欠けていますか?

StreamWriter myWriter1 = new StreamWriter(resultpath); 
List<string> a = File.ReadAllLines(path).ToList(); 
List<string> b = File.ReadAllLines(newPath).ToList(); 

foreach (string s in a) 
{ 
    Console.WriteLine(s); 
    if (!b.Contains(s)) 
    { 
     myWriter1.WriteLine(s); 
     myWriter1.Close(); 
    } 
    else 
    { 
     continue; 
    } 
} 

string[] resultfile = File.ReadAllLines(resultpath); 
if (resultfile == null || resultfile.Length == 0) 
{ 
    myWriter1.WriteLine("Der er ikke nogen udmeldinger idag", true); 
} 
myWriter1.Close(); 
+0

「if(!b.Contains(s))」条件が満たされなかった可能性はありますか?この場合、同じファイルから読み込む前にライターが閉じられていませんでした。 –

+0

'foreach'ループの中で' myWriter1.Close(); 'を削除するとどうなりますか? 'string [] resultfile = File.ReadAllLines(resultpath);'の直前に実行します。 – Pikoh

+0

いいえ、その部分が満たされていて、正常に動作していれば、すべてが一致すれば空白のテキストが表示されます。 –

答えて

1

このコードを試してください。あなたは2つの解析ファイルにある各行でStreamWriterを閉じていましたが、偶然がなければ決して閉じません。

また
using (var myWriter1 = new StreamWriter(resultpath, true)) 
{ 
    List<string> a = File.ReadAllLines(path).ToList(); 
    List<string> b = File.ReadAllLines(newPath).ToList(); 


    int coincidences=0; 
    foreach (string s in a) 
    { 
     Console.WriteLine(s); 


     if (!b.Contains(s)) 
     { 
      myWriter1.WriteLine(s); 
      coincidences++; 
     } 
    } 

    if (coincidences == 0) 
    { 
     myWriter1.WriteLine("Der er ikke nogen udmeldinger idag", true); 
    } 

} 

、それが終わったときに、それはすべてのリソースを配置するよう、using句で囲む方が良いでしょうIDisposableのオブジェクトのことに注意してください。

2

あなたはループの中で、それに書き込んだ後&処分ファイルライターを閉じて、再度同じファイルへの書き込みをニートときにそれを再作成することができます。

usingステートメントにまとめて、管理されていないリソースを自動的に解放するようにしてください(ループ内で何度も閉じる必要はありません)。

List<string> a = File.ReadAllLines(path).ToList(); 
List<string> b = File.ReadAllLines(newPath).ToList(); 

using (var myWriter1 = new StreamWriter(resultpath, false)) 
{ 
    foreach (string s in a) 
    { 
     Console.WriteLine(s); 

     if (!b.Contains(s)) 
      myWriter1.WriteLine(s); 
    } 
} 


string[] resultfile = File.ReadAllLines(resultpath); 

if (resultfile == null || resultfile.Length == 0) 
{ 
    using (var myWriter1 = new StreamWriter(resultpath, true)) 
    { 
     myWriter1.WriteLine("Der er ikke nogen udmeldinger idag", true); 
    } 

} 
+0

この状況では 'else continue;'を実行するためのポイントはありますか? (ちょうどOPがそれを持っていた理由とあなたがそれを保つことを決めた理由を疑問に思う) – Innat3

+0

@ Innat3確かに、そうではありません;)、ありがとう、 –

関連する問題