2016-06-10 6 views
0

저는 C# 과정을 수강하고 있으며 현재 할당은 "고객 주문"디렉터리에서 새 파일 (지난 24 시간 동안 수정 됨)을 전송하는 콘솔 응용 프로그램을 만드는 것입니다. "Home Office"디렉토리로 이동하십시오.지난 24 시간 동안 콘솔에서 수정 된 파일 인쇄

이 시점에서 필자는 어떤 파일이 새로운 것인지 알아낼 수있는 방법을 찾기 위해 노력하고 있습니다. 그것이 작동하는지 확인하기 위해 Console.WriteLine을 사용하여 새 파일을 콘솔 창에 인쇄합니다. 그러나 인쇄 작업은 "System.Linq.Enumerable + WhereArrayIterator'1 [System.IO.FileInfo]"입니다.

나는이 언어에 아주 익숙하다. 나는 이미 모든 것이 잘못된 길로 가고 있다고 걱정한다. 여기 내 코드는 지금까지 (에 StackOverflow에서 인터넷 검색과 점점 아이디어의 시간 후)입니다 :

class ModifiedFiles 
    { 
     public string your_dir; 

     public IEnumerable<FileInfo> modified() 
     { 
      your_dir = @"C:\Users\Student\Desktop\Customer Orders"; 
      var directory = new DirectoryInfo(your_dir); 
      DateTime from_date = DateTime.Now.AddDays(-1); 
      DateTime to_date = DateTime.Now; 
      var files = directory.GetFiles() 
       .Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date); 
      return files; 
     } 
    } 
    static void Main(string[] args) 
    { 
     ModifiedFiles newFiles = new ModifiedFiles(); 
     Console.WriteLine(newFiles.modified()); 
     Console.ReadLine(); 
    } 

누군가가 친절하게 여기 무슨 일이 일어나고 있는지 지적하고 바른 길에 저를 설정할 수 있습니까?

+1

.ToList를 추가() ToList를 추가 한 후 linq – LamonteCristo

+0

에 foreach를 사용하여 모든 결과를 WriteLine에 루프하십시오. – Berkay

+0

고마워요. –

답변

0

무엇 일어나는 것은 C#에서 모든 종류의이 ToString 방법을 상속 할 있음을 이 재정의되지 않으면 개체의 기본 문자열 표현 인 이 해당 이름 유형으로 인쇄됩니다.

참조 :

https://msdn.microsoft.com/en-us/library/system.object.tostring(v=vs.110).aspx

지금 여기에 4 예, 모든 파일 이름을 인쇄하고, ToString의 기본 동작 및 재정의 된 동작을 보여주는이 :

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 

namespace MyConsole 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      var path = Environment.CurrentDirectory; 
      var fromDate = DateTime.Now.AddDays(-1); 
      var toDate = DateTime.Now; 

      var files = MyClass.GetModifiedFiles(path, fromDate, toDate); 

      //System.Linq.Enumerable+WhereArrayIterator`1[System.IO.FileInfo] 
      Console.WriteLine(files); 

      //System.Collections.Generic.List`1[System.IO.FileInfo] 
      Console.WriteLine(files.ToList()); 

      //MyConsole.exe 
      //MyConsole.exe.config 
      //MyConsole.pdb 
      //MyConsole.vshost.exe 
      //MyConsole.vshost.exe.config 
      foreach (var file in files) 
      { 
       Console.WriteLine(file.Name); 
      } 

      //MyConsole.exe 
      //MyConsole.exe.config 
      //MyConsole.pdb 
      //MyConsole.vshost.exe 
      //MyConsole.vshost.exe.config  
      var myClass = new MyClass(); 
      myClass.FindModifiedFiles(path, fromDate, toDate); 
      Console.WriteLine(myClass); // .ToString implicitly called 

      Console.ReadLine(); 
     } 
    } 

    internal class MyClass 
    { 
     private IEnumerable<FileInfo> _modifiedFiles; 

     public void FindModifiedFiles(string path, DateTime fromDate, DateTime toDate) 
     { 
      _modifiedFiles = GetModifiedFiles(path, fromDate, toDate); 
     } 

     /* overriding default implemenation of ToString */ 

     /// <summary>Returns a string that represents the current object.</summary> 
     /// <returns>A string that represents the current object.</returns> 
     /// <filterpriority>2</filterpriority> 
     public override string ToString() 
     { 
      return string.Join(Environment.NewLine, _modifiedFiles.Select(s => s.Name)); 
     } 

     public static IEnumerable<FileInfo> GetModifiedFiles(string path, DateTime fromDate, DateTime toDate) 
     { 
      if (path == null) throw new ArgumentNullException(nameof(path)); 
      var directory = new DirectoryInfo(path); 
      var files = directory.GetFiles() 
       .Where(file => file.LastWriteTime >= fromDate && file.LastWriteTime <= toDate); 
      return files; 
     } 
    } 
} 
0

은 코멘트를, 나는 내 방식의 return 문에 .ToList()을 추가 한 후 홈페이지에서이 foreach 루프 생성 :

foreach (var file in newFiles.modified()) 
{ 
    Console.WriteLine(file); 
} 
관련 문제