FileSystemWatcher 局域网中大文件的内部传输共享和处理方案

在不使用其他软件的情况下共享,且自动清理。

1、在服务器建了个临时文件夹共享,并且设置只可写入和读取,不可执行(删除)

2、写服务

源码附上

private void OnCreated(object sender, FileSystemEventArgs e)
        {
            if (AddNewFile.Exists(a => a == e.Name) == false)
            {
                AddNewFile.Add(e.Name);
            }
            //manual.Reset();
            Waiting(e.FullPath);//等待文件创建完成
            int execint = 0;
            new Thread(() =>
            {
                do
                {
                    try
                    {
                        DateTime dtNow = DateTime.Now;
                        File.SetLastWriteTime(e.FullPath, dtNow);
                        var fileinfo = new FileInfo(e.FullPath);
                        if (fileinfo.LastWriteTime == dtNow)
                        {
                            AddNewFile.Remove(e.Name);
                            break;
                        }
                        Thread.Sleep(1000);
                        execint = 10;
                    }
                    catch
                    {

                    }
                } while (execint < 3);
            }).Start();
        }
        private static List<string> AddNewFile = new List<string>();
        private void Waiting(string path)
        {
            try
            {
                FileInfo fi;
                fi = new FileInfo(path);
                long len1, len2;
                len2 = fi.Length;
                do
                {
                    len1 = len2;
                    Thread.Sleep(100);//等待1秒钟
                    fi.Refresh();//这个语句不能漏了
                    len2 = fi.Length;
                } while (len1 < len2);
            }
            catch { }
        }
        protected override void OnStart(string[] args)
        {
            FileSystemWatcher watcher = new FileSystemWatcher(DirPath);
            watcher.NotifyFilter = NotifyFilters.Attributes
                                     | NotifyFilters.CreationTime
                                     | NotifyFilters.DirectoryName
                                     | NotifyFilters.FileName
                                     | NotifyFilters.LastAccess
                                     | NotifyFilters.LastWrite
                                     | NotifyFilters.Security
                                     | NotifyFilters.Size;
            watcher.Created += OnCreated;
            watcher.Filter = "*.*";
            watcher.IncludeSubdirectories = true;//监控子文件夹
            watcher.EnableRaisingEvents = true;
            th = new Thread(() =>
            {
                while (true)
                {
                    string[] files = Directory.GetFiles(DirPath);
                    foreach (string filefull in files)
                    {
                        var fileinfo = new FileInfo(filefull);
                        if (fileinfo.Name == "此临时文件夹超过8小时自动清理.txt")//给其他人提示的Readme不删
                        {
                            continue;
                        }
                        if (AddNewFile.Exists(a => a == fileinfo.Name))//不删除新增的这个文件,因为要改时间为最新
                        {
                            continue;
                        }
                        TimeSpan ts = DateTime.Now - fileinfo.LastWriteTime;
                        string time = ts.TotalHours.ToString();   //将时间差转换为秒
                        if (ts.TotalHours > 8)
                        {
                            try
                            {
                                if (File.Exists(filefull))
                                    File.Delete(filefull);
                            }
                            catch (Exception)
                            {
                                throw;
                            }
                        }
                    }
                    Thread.Sleep(10000);
                }
            });
            th.IsBackground = true;
            th.Start();

            new Thread(() =>
            {
                //定时清理AddNewFile
                while (true)
                {
                    string[] files = Directory.GetFiles(DirPath);
                    foreach (string filefull in files)
                    {
                        var fileinfo = new FileInfo(filefull);
                        if (AddNewFile.Exists(a => a == fileinfo.Name) == false)//不删除新增的这个文件,因为要改时间为最新
                        {
                            AddNewFile.Remove(fileinfo.Name);
                        }
                    }
                    Thread.Sleep(1800000);//30分钟清理
                }
            }).Start();
#if DEBUG
            while (true) { }
#endif

        }
 protected override void OnStop()
        {
            if (th != null && th.ThreadState != System.Threading.ThreadState.Aborted) { th.Abort(); }
        }

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceProcess;
using System.Text;

namespace ClearFile
{
    internal static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        static void Main()
        {

#if DEBUG
            Service1 service1 = new Service1();
            service1.TestStartupAndStop(new string[0]);
            return;
#endif
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[]
            {
                new Service1()
            };
            ServiceBase.Run(ServicesToRun);//用于自动清理超8小时的文件

        }
    }
}

 

作者:兮去┓( ´∀` )┏博客
出处:https://www.cnblogs.com/bklsj/p/17347520.html
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

posted @ 2023-04-23 19:48  兮去  阅读(47)  评论(0编辑  收藏  举报