2014-04-15 19 views
9

Tôi có khác C# code mà giọt một file ghi âm cuộc gọi vào thư mục c: \ RecordingsKiểm tra xem thư mục chứa các tập tin với phần mở rộng nhất định

Mỗi tập tin có phần mở rộng của .wma

Tôi muốn có thể kiểm tra thư mục sau mỗi 5 phút. Nếu thư mục chứa một tệp kết thúc bằng .wma, tôi muốn thực thi một số mã.

Nếu thư mục không chứa tệp có đuôi .wma, tôi muốn mã tạm dừng trong 5 phút và sau đó kiểm tra lại (vô hạn).

Tôi đã bắt đầu với kiểm tra sau nếu thư mục có bất kỳ tệp nào trong đó, nhưng khi tôi chạy nó, nó luôn báo cáo thư mục chứa tệp, mặc dù nó không có.

string dirPath = @"c:\recordings\"; 
     if (Directory.GetFiles(dirPath).Length == 0) 
     { 
      NewRecordingExists = true; 
      Console.WriteLine("New Recording exists"); 
     } 
     else 
     { 
      NewRecordingExists = false; 
      Console.WriteLine("No New Recording exists"); 
      System.Threading.Thread.Sleep(300000); 
     } 
+5

'Directory.GetFiles (dirPath," * .wma "). Length == 0' để lọc ra mọi tệp khác ngoại trừ phần mở rộng wma. Bạn có thể xem tại http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.110).aspx có thể sẽ phục vụ mục đích của bạn –

Trả lời

21
if (Directory.GetFiles(dirPath).Length == 0) 

này được kiểm tra nếu không có file ... sau đó bạn lại báo cáo "New Recording exists". Tôi nghĩ rằng bạn chỉ có logic của bạn một cách sai lầm xung quanh. else là nơi nó có nghĩa là bạn đã tìm thấy một số tệp.

Bên cạnh đó, nếu bạn muốn kiểm tra chỉ *.wma file sau đó bạn có thể sử dụng the GetFiles overload that takes a search pattern parameter, ví dụ:

if (Directory.GetFiles(dirPath, "*.wma").Length == 0) 
{ 
    //NO matching *.wma files 
} 
else 
{ 
    //has matching *.wma files 
} 

SIDE LƯU Ý: Bạn có thể quan tâm đến các FileSystemWatcher, điều này sẽ cho phép bạn theo dõi thư mục bản ghi của mình để thay đổi (bao gồm cả khi tệp được thêm). Điều này sẽ loại bỏ yêu cầu của bạn để thăm dò ý kiến ​​mỗi 5 phút, và bạn nhận được thực hiện gần như ngay lập tức khi tập tin được thêm vào, trái ngược với chờ đợi khoảng thời gian 5 phút để đánh dấu trên

+0

Làm cách nào tôi có thể kiểm tra nhiều hơn 2 ví dụ: .xls và .xlsx – wearybands

+0

@wearybands: Bằng cách tìm kiếm [câu trả lời] (http://stackoverflow.com/questions/3527203/getfiles-with-multiple-extentions) – musefan

1

Trước hết logic của bạn được đảo ngược! ;)
ở đây là bạn mã đúng:

 bool NewRecordingExists; 
     string dirPath = @"c:\recordings\"; 
     string[] fileNames = Directory.GetFiles(dirPath, "*.wma", SearchOption.TopDirectoryOnly); 
     if (fileNames.Length != 0) 
     { 
      NewRecordingExists = true; 
      foreach (string fileName in fileNames) 
      { 
       Console.WriteLine("New Recording exists: {0}", fileName); 
       /* do you process for each file here */ 
      } 
     } 
     else 
     { 
      NewRecordingExists = false; 
      Console.WriteLine("No New Recording exists"); 
      System.Threading.Thread.Sleep(300000); 
     } 

Mặc dù, tôi khuyên bạn nên sử dụng System.Timers.Timer lớp cho bạn ứng dụng!

Các vấn đề liên quan