ایجاد فایل Watcher Window Service در #C

جمعه 3 مهر 1394

در این مقاله می خواهیم در مورد Watcher Window Service که ما نیاز داریم به نظارت فایلی که درست شده است یا نه کار آن تمام شده است یا بر اساس یک برنامه ریزی روی سرور است ، ما می خواهیم یک Service را ایجاد کنیم با این نوع که نظارت بر فایلی که درست شده است یا در مکان خاصی ایجاد نشده است.

ایجاد فایل Watcher Window Service در #C

در این مقاله نیاز به نظارت فایل هایی که درست شده است یا نه پس از اتمام کار درست شده است یا بر اساس برنامه ریزی روی سرور است ما یک Windows Service ای را می خواهیم بسازیم با این نوع که یا ساخته شده است یا در یک مکان خاص وجود ندارد.

مرحله اول:

نیاز به اضافه کردن آدرس در فایل App.Config دارید:

ما در اینجا دو FileWatcher اضافه می کنیم با دو آدرس مکان

<appSettings>  
   <add key="WatchPath1" value="D:\\articleimg" />  
   <add key="WatchPath2" value="D:\\MYdata" />  
</appSettings> 

مرحله دوم:باید FileWatcher را از قسمت Toolbox ها بکشید و بر روی صفحه رها کنید

مرحله سوم:

باید  AddReference  را  بزنید و dll های مربوطه را اضافه کنید.

بعد از اضافه کردن NameSpace System.Configurationدر کلاس Service1.cs کد های زیر را می نویسید:

string WatchPath1 = ConfigurationManager.AppSettings["WatchPath1"];  
string WatchPath2 = ConfigurationManager.AppSettings["WatchPath2"]; 

مرحله چهارم:

داخل متد OnStart  به FileWatcher های خود مقدار می دهید به صورت تصویر زیر :

protected override void OnStart(string[] args)  
{  
    try  
    {  
        fileWatcherWatchDdriveArticleimagefolder.Path = WatchPath1;  
        fileWatcherWatchDDriveMYdataFolder.Path = WatchPath2;  
    }  
    catch (Exception ex)  
    {  
        throw ex;  
    }  
} 

مرحله پنجم:باید متد های ساخته شده FileWatcher را در FileWatcherService قرار دهید به صورت شکل زیر:

در تصویر زیر کد های مربوط به رویداد FileWatcher نوشته شده است که به صورت زیر است:

/// <summary>  
/// This event monitor folder wheater file created or not.  
/// </summary>  
/// <param name="sender"></param>  
/// <param name="e"></param>  
void fileWatcherWatchDDriveMYdataFolder_Created(object sender, System.IO.FileSystemEventArgs e)  
{  
    try  
    {  
        Thread.Sleep(70000);  
        //Then we need to check file is exist or not which is created.  
        if (CheckFileExistance(WatchPath2, e.Name))  
        {  
            //Then write code for log detail of file in text file.  
            CreateTextFile(WatchPath2,e.Name);  
        }  
  
    }  
    catch (Exception ex)  
    {  
  
        throw ex;  
    }  
  
} 

حالا در متد CheckFileExistance دایرکتوری و فایل های موجود را چک می کند و درست یا نادرست بودن آن را بر می گرداند.

private bool CheckFileExistance(string FullPath, string FileName)  
{  
    // Get the subdirectories for the specified directory.'  
    bool IsFileExist = false;  
    DirectoryInfo dir = new DirectoryInfo(FullPath);  
    if (!dir.Exists)  
        IsFileExist = false;  
    else  
    {  
        string FileFullPath = Path.Combine(FullPath, FileName);  
        if (File.Exists(FileFullPath))  
            IsFileExist = true;  
    }  
    return IsFileExist;  
  
  
} 

متد CreateTextFile این متد در صورت درست بودن متد بالا بر می گردد.این متد برای ایجاد فایل متنی و حفظ وضعیت ایجاد فایل استفاده می شود.

private void CreateTextFile(string FullPath, string FileName)  
{  
    StreamWriter SW;  
    if (!File.Exists(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "txtStatus_" + DateTime.Now.ToString("yyyyMMdd") + ".txt")))  
    {  
        SW = File.CreateText(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "txtStatus_" + DateTime.Now.ToString("yyyyMMdd") + ".txt"));  
        SW.Close();  
    }  
    using (SW = File.AppendText(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "txtStatus_" + DateTime.Now.ToString("yyyyMMdd") + ".txt")))  
    {  
        SW.WriteLine("File Created with Name: " + FileName + " at this location: " + FullPath);  
        SW.Close();  
    }  
} 

مرحله هفتم:حالا یک متد دیگر لازم داریم این متد برای حفظ وضعیت حالت ServiceStop در یک فایل متنی است.که ما یک فایل متنی را درست می کنیم و ServiceStopTime در آن قرار می گیرد.

public static void Create_ServiceStoptextfile()  
{  
    string Destination = "D:\\articleimg\\FileWatcherWinService";  
    StreamWriter SW;  
    if (Directory.Exists(Destination))  
    {  
        Destination = System.IO.Path.Combine(Destination, "txtServiceStop_" + DateTime.Now.ToString("yyyyMMdd") + ".txt");  
        if (!File.Exists(Destination))  
        {  
            SW = File.CreateText(Destination);  
            SW.Close();  
        }  
    }  
    using (SW = File.AppendText(Destination))  
    {  
        SW.Write("\r\n\n");  
        SW.WriteLine("Service Stopped at: " + DateTime.Now.ToString("dd-MM-yyyy H:mm:ss"));  
        SW.Close();  
    }  
}

سپس ما متد بالا را در رویداد OnStop صدا می زنیم.

protected override void OnStop()  
{  
   try  
   {  
      Create_ServiceStoptextfile();  
   }  
   catch (Exception ex)  
   {  
  
      throw ex;  
   }  
  
}

مرحله هشتم:بعد از تمام این کارها ما نیاز به نصب Windows Serviceداریم

مرحله نهم:بعد از نصب Windows Service شما می توانید خروجی زیر را ببینید.

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 1k بازدید
  • 1 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید