同标题
我想做一个windows服务,来判断到了一个特定的时间,去删除一个目录下的文件。

解决方案 »

  1.   

    調用API來判斷時間,然後刪除.
    using System.Runtime.InteropServices;
    [StructLayout(LayoutKind.Sequential)]
    public struct SystemTime
    {
    public ushort wYear;
    public ushort wMonth;
    public ushort wDayOfWeek;
    public ushort wDay;
    public ushort wHour;
    public ushort wMinute;
    public ushort wSecond;
    public ushort wMiliseconds;
    }
    public class Win32
    {
    [DllImport("Kernel32.dll")]
    public static extern bool SetSystemTime( ref SystemTime sysTime );
    [DllImport("Kernel32.dll")]
    public static extern void GetSystemTime(ref SystemTime sysTime);
    }
    private void TestTime()
    {
    SystemTime time = new SystemTime();
    Win32.GetSystemTime( ref time );
    time.wMonth = 6;
    Win32.SetSystemTime( ref time );
    }
    上面就是調用時間的API用法,總貼出主要代碼,部分代碼省略。
      

  2.   

    更簡單的方法是用DataTime類來取得當前的時候,和你的特定時間比較,時間相同則del file
      

  3.   

    取得时间很容易,但取得时间的代码和删除文件的代码写在什么地方呢?
    onstart()
    OnStop()
    ......
    还是其他的什么方法中?就是要怎么样才能出发这个事件
      

  4.   


    onstart启动一个新线程。该线程计算当前至特定时间的时间差值,然后等待这个差值,随后执行相关操作。欢迎大家来我的博客作客:http://blog.csdn.net/aafshzj/
    我正在写一系列关于AAF组件框架的文章。该框架能对开发工作提供很多帮助,并极大地提高开发效率。希望大家看一看并提出宝贵建议。
      

  5.   

    protected override void OnStart(string[] args)
    {
     Thread taskThread = new Thread(new ThreadStart(DoTask));
     taskThread.Start();
    }
     
    private void DoTask()
    {
     DateTime taskTime = ReadTimeSettingFromSomeWhere();
     Thread.Sleep(((TimeSpan)taskTime - DataTime.Now).TotalMilliseconds());
      DeleteFiles();
    }
      

  6.   

    to 取得时间很容易,但取得时间的代码和删除文件的代码写在什么地方呢?在OnStart事件中单独开一个线程,然后类似如下操作
    private void ThreadFun()
    {
    DateTime dtNow = DateTime.Now;
    DateTime dtSpecialTime = new DateTime( dtNow.Year, dtNow.Month, dtNow.Day, 12, 0, 0 );//Every day 12am
    While( !blnStop )
    {
        dtNow = DateTime.Now;
        if( dtSpecialTime < dtNow )
            dtSpecialTime.AddDays( 1 );
        Thread.Sleep( dtSpecialTime - dtNow );
        //Delete files here
    }
    }
    //onstart event
    Thread thdSub = new Thread( new ThreadStart( ThreadFun ) );
    thdSub.Start();
      

  7.   

    真实的算法可能更复杂,因为既然是一个windows服务不可能就用来删除一次,可能需要每天定时删除,那就要将DoTask变成一个循环。每次循环开始先判断下一个任务执行日期及时间,然后计算等待时间并等待,到点删除,然后进入下一循环。如此周而复始。
      

  8.   

    to Knight94(愚翁) 
    >While( !blnStop )
    这里的blnStop怎么来的?没有定义吗还有dtSpecialTime.AddDays( 1 );这句话是不是不需要的!只要判断如果dtSpecialTime!= dtNow ,就Thread.Sleep( dtSpecialTime - dtNow );就好了
      

  9.   

    to >While( !blnStop )
    这里的blnStop怎么来的?没有定义吗这是关闭线程的标志,定义个全局的成员即可
    例如:
    private bool blnStop = false;to 还有dtSpecialTime.AddDays( 1 );这句话是不是不需要的!只要判断如果dtSpecialTime!= dtNow ,就Thread.Sleep( dtSpecialTime - dtNow );就好了当然有意义,首先需要等待的时间必须大于当前事件,这样Thread.Sleep才有意义。
      

  10.   

    to Knight94(愚翁) 
    这个话
    private bool blnStop = false;
    是要放在private void ThreadFun()中吗?还是其他地方
      

  11.   

    aafshzj() 
    这一句 
    Thread.Sleep(((TimeSpan)taskTime - DataTime.Now).TotalMilliseconds());
    好像调不通亚
      

  12.   

    to 是要放在private void ThreadFun()中吗?还是其他地方不是,定义成类的成员。
      

  13.   

    to>Knight94(愚翁)
    这句话
    Thread.Sleep( dtSpecialTime - dtNow );
    不能运行!是什么问题
      

  14.   

    to Thread.Sleep( dtSpecialTime - dtNow );
    不能运行!是什么问题Change as follows:
    Thread.Sleep( (TimeSpan)(dtSpecialTime - dtNow) );
      

  15.   

    to>Knight94(愚翁)
    我这样写有没有问题
    当dtSpecialTime =dtNow 或者dtSpecialTime <dtNow 时报错private void ThreadFun()
            {
                
                DateTime dtNow = DateTime.Now;
                DateTime dtSpecialTime = new DateTime( dtNow.Year, dtNow.Month, dtNow.Day, 16, 45, 0 );//Every day 12am
                
                while(!blnStop)
                
                {
                    dtNow = DateTime.Now;
                    if (dtSpecialTime < dtNow)
                    {
                        dtSpecialTime.AddDays(1);                }
                    Thread.Sleep((TimeSpan)(dtSpecialTime - dtNow));                foreach (string strFileName in Directory.GetFiles(@"D:\lifengxin\WATABE\src\Export", "*.pdf"))
                    {                    FileInfo fi = new FileInfo(strFileName);
                        DateTime TodayTime = new DateTime(dtNow.Year, dtNow.Month, dtNow.Day);
                        if (fi.CreationTime.Date < TodayTime)
                        {
                            File.Delete(strFileName);
                        }
                    }
                    
                 }
            }
      

  16.   

    change
    if (dtSpecialTime < dtNow)
    {
    dtSpecialTime.AddDays(1);}with
    if (dtSpecialTime < dtNow)
    {
    dtSpecialTime = dtSpecialTime.AddDays(1);}
      

  17.   

    dtSpecialTime.AddDays(1);
    好像没有起作用。
    我测试了一下
    即使dtSpecialTime <dtNow 
    运行了dtSpecialTime.AddDays(1);
    后,dtSpecialTime  得值仍然没有变