2014-09-05 116 views
0

我在C#中有一個簡單的應用程序,該應用程序將PDF從一個位置移動到另一個位置。每分鐘在控制檯應用程序中執行代碼

namespace MoveFiles 
{ 
class Program 
{ 
    public static string destinationPath = @"S:\Re\C"; 
    static void Main(string[] args) 
    { 

     //location of PDF files 

     string path = @"S:\Can\Save"; 

     //get ONLY PDFs 

     string[] filePath = Directory.GetFiles(path, "*.pdf"); 


     foreach (string file in filePath) 
     { 
      Console.WriteLine(file); 
      string dest = destinationPath + "\\" + Path.GetFileName(file); 
      File.Move(file, dest); 
     } 
     Console.ReadKey(); 


    } 
} 

}

如果我運行這個程序,它的工作,但是,我需要這個代碼,每分鐘要執行。我可以使用task scheduler來每分鐘運行一次應用程序,但不幸的是,最小運行時間是5分鐘。

我試圖使用while(true)但它不起作用。如果我在應用程序運行時向文件夾添加更多PDF文件,它將不會將其移至其他文件夾。

我發現了一個建議,在網上使用Timer但我有問題:

static void Main(string[] args) 
{ 
    Timer t = new Timer(60000); // 1 sec = 1000, 60 sec = 60000 
    t.AutoReset = true; 
    t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed); 
    t.Start(); 
    } 
    private static void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
    { 
    // do stuff every minute 
    } 

但我得到的編譯器錯誤:

錯誤2參數1:無法從「詮釋」轉換到'System.Threading.TimerCallback'C:\ Win \ MoveFiles \ MoveFiles \ MoveFiles \ Program.cs 22 33 MoveFiles

關於如何解決這個問題的任何建議ssue?

+0

有兩個Timer類,System.Threading.Timer和System.Timers.Timer。你已經得到了System.Timers.Timer的代碼,但是Timer正在解析爲System.Threading.Timer。我猜測有一個使用System.Threading,你沒有告訴我們。 – 2014-09-05 21:55:30

+0

@mikez,這就是整個應用程序,在這個應用程序中沒有更多的代碼... – smr5 2014-09-05 21:56:37

+0

在某處使用指令(例如'using System;')。否則,那些對Console,Path,Directory等類的引用將無法編譯。 – 2014-09-05 21:58:37

回答

0

該解決方案比我想象的要容易。

下面是我解決它的方法。這可能不是最好的解決方案,但它適合我的需求。

我創建了一個while循環,並使用Thread.Sleep(60000)強制應用程序在再次執行之前進入睡眠狀態。

namespace MoveFiles 
{ 
class Program 
{ 
    public static string destinationPath = @"S:\Re\C"; 
    static void Main(string[] args) 
    { 

     //location of PDF files 

     while (true) 
     { 
      string path = @"S:\Can\Save"; 

      //get ONLY PDFs 

      string[] filePath = Directory.GetFiles(path, "*.pdf"); 


      foreach (string file in filePath) 
      { 
       Console.WriteLine(file); 
       string dest = destinationPath + "\\" + Path.GetFileName(file); 
       File.Move(file, dest); 
      } 
      Thread.Sleep(60000); 
     } 

    } 

} 
} 
0

退房這裏的構造函數:http://msdn.microsoft.com/en-us/library/system.threading.timer(v=vs.110).aspx

這是此構造方法簽名之一:

Timer(TimerCallback, Object, Int32, Int32) 

你不能實例化一個System.Threading.Timer只間隔。請改用System.Timers.Timer(http://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.110).aspx),或者必須提供TimerCallback,Object狀態(可爲空),到期時間和句點。請參閱此處:「參數」下的http://msdn.microsoft.com/en-us/library/2x96zfy7(v=vs.110).aspx

0
private static Timer timer; 

static void Main(string[] args) 
{ 
    timer = new Timer(timer_Elapsed); 
    timer.Change(60000, 60000); 
    Console.ReadKey(); 
} 

private static void timer_Elapsed(object o) 
{ 
    // do stuff every minute 
} 
+0

它永遠不會進入'private static void t_Elapsed(object o)'應用程序關閉...? – smr5 2014-09-05 21:55:05

+0

@ user1426542您需要保持控制檯應用程序以某種方式活動。什麼時候該關閉? – Zer0 2014-09-05 21:56:34

+0

這個應用程序應該運行至少一天。這是一個將文件從一個位置移動到另一個位置的臨時應用程序。它應該在用戶關閉應用程序時關閉。 – smr5 2014-09-05 22:00:36

相關問題