2017-10-31 13 views
1

ストリームライターの主な対象(以下のコード内)は、削除されたディレクトリのみを報告する必要があります。ディレクトリは、設定された日付より古い場合に削除されます。ただし、ストリームライターは削除されたアイテムではなく最後のディレクトリのみを書き込んでいます。私はかなり新しく、私が間違っていることを理解しようとすると、どんな助けもありがたいです。ストリームライターが削除されたフォルダーを一覧表示しない

プログラム

using System; 
using System.IO; 
using System.Configuration; 
using System.Text; 

public class Program 
{ 


    static void Main(string[] args) 
    { 
     //number of days from App.config 
     String daysPast = ConfigurationManager.AppSettings["TimeSpan"]; 

     String path = ConfigurationManager.AppSettings["FilePath"]; 

     // Reference to a directory. 
     DirectoryInfo di = new DirectoryInfo(path); 

     // Reference to each directory in that directory. 
     DirectoryInfo[] diArr = di.GetDirectories(); 


     //StreamWriter file name 
     string fileName = "fileResults_" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm") + ".txt"; 

     try 
     { 
      foreach (DirectoryInfo dir in diArr) 
      { 
       if (dir.LastWriteTime < DateTime.Parse(daysPast)) 
        Directory.Delete(dir.FullName, true); 


       using (StreamWriter sw = new StreamWriter(fileName, false)) 
       { 
        foreach (DirectoryInfo FilePath in di.GetDirectories()) 
        { 
         sw.WriteLine("File(s) deleted on: " + DateTime.Now); 
         sw.WriteLine("============================================"); 
         sw.WriteLine(""); 
         sw.WriteLine(dir.FullName,false); 
         sw.WriteLine(""); 
         sw.WriteLine("End of list"); 
         sw.WriteLine(""); 
         sw.Flush(); 
        } 
       } 
      } 
     } 

     catch (InvalidCastException) 
     { 
      Console.WriteLine("There was an issue, please try again."); 
     } 
    } 
} 

app.configを

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="FilePath" value="C:\testFolder\" /><!--root folder --> 
    <add key="TimeSpan" value="-2.00:00:00"/><!--adjust days --> 
    </appSettings> 
</configuration> 

答えて

1

あなたはファイルあなたがforeach (DirectoryInfo dir in diArr)を使用して反復するたびに書き換えています。

また、あなたのif (dir.LastWriteTime < DateTime.Parse(daysPast))ブロックの中括弧なしで、コードの唯一の次の行(Directory.Delete(dir.FullName, true);)は、その条件に依存することになり、そのためusing (StreamWriter sw = new StreamWriter(fileName, false))は、したがって、それは常に最後のファイルだけを書いている、すべてのディレクトリに対して実行されます。

は、それはあなたが(tryブロック内で)必要がある。このようなものです:

List<string> deletedDirectories = new List<string>(); 

foreach (DirectoryInfo dir in diArr) 
{ 
    if (dir.LastWriteTime < DateTime.Parse(daysPast)) 
    { 
     Directory.Delete(dir.FullName, true); 
     deletedDirectories.Add(dir.FullName); 
    } 
} 

using (StreamWriter sw = new StreamWriter(fileName, false)) 
{ 
    sw.WriteLine("File(s) deleted on: " + DateTime.Now); 
    sw.WriteLine("============================================"); 
    sw.WriteLine(""); 

    foreach (string deletedDirectory in deletedDirectories) 
    { 
     sw.WriteLine(deletedDirectory); 
    } 

    sw.WriteLine(""); 
    sw.WriteLine("End of list"); 
    sw.WriteLine(""); 
} 

これは、リストで削除したディレクトリを格納し、その後、削除ループが終了した後にファイルに書き込みます。

+0

はい!魅力のように働いた、ありがとう@クリスマック。 – user7701115

関連する問題