2017-10-31 8 views
1

스트림 작성자의 주요 대상 (아래 코드에서)은 삭제 된 디렉터리 만보고해야합니다. 디렉토리가 설정된 날짜보다 오래되면 삭제됩니다. 그러나 streamwriter는 삭제 된 항목이 아닌 마지막 디렉토리 만 쓰고 있습니다. 나는 꽤 새롭고 내가 뭘 잘못하고 있는지 이해하려고 노력했는데, 어떤 도움을 주셔서 감사합니다.스트림 작성자가 삭제 된 폴더를 나열하지 않음

프로그램

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

예! 매력처럼 작동했습니다. @ Christ Mack에게 감사드립니다. – user7701115