C# WinForms ve Mono GTK Console Sistem ve Servis Programlama Yazılım ve Sistem Güvenliği

C# Dosya Değişikliklerini İzleme

Terminal sunucusu gibi ortak paylaşılan bilgisayarlarda dosya değişikliklerini izlemek ve kayıt altına almak için aşağıdaki örnek c# kod bloğu kullanılabilir.

static string user_name="";
static void Main(string[] args)
        {
            Console.WriteLine("Merhaba. Kapatmak için q tuşlayınız.");
            user_name = System.IO.File.GetAccessControl(e.FullPath).GetOwner(typeof(System.Security.Principal.NTAccount)).ToString();

            string dizin = "c:\\";
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = dizin;
            watcher.Filter = "*.*";

            watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            watcher.IncludeSubdirectories = true;
            watcher.EnableRaisingEvents = true;

            watcher.Changed += new FileSystemEventHandler(OnChanged);
            watcher.Created += new FileSystemEventHandler(OnChanged);
            watcher.Deleted += new FileSystemEventHandler(OnChanged);
            watcher.Renamed += new RenamedEventHandler(OnRenamed);
            while (Console.Read() != 'q') ;
        }

        private static void OnChanged(object source, FileSystemEventArgs e)
        {
            Console.WriteLine("Kullanıcı: " + user_name + e.FullPath + e.ChangeType);
        }

        private static void OnRenamed(object source, RenamedEventArgs e)
        {
            Console.WriteLine("Dosya: {0} yeniden {1} olarak adlandırıldı", e.OldFullPath, e.FullPath);
        }

 

Yukarıdaki konsol uygulaması servis olarak kullanmak isteyenlere katkı sağlayabilir. Ayrıca GUI içeren bir uygulamanın kaynağını da aşağıda paylaşıyorum.

string user_name = "";
        List<List<string>> vrs = new List<List<string>>();
        FileSystemWatcher watcher = new FileSystemWatcher();
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            CheckForIllegalCrossThreadCalls = false;
            oku();
        }

        void oku()
        {
            string dizin = "c:\\";
            watcher.Path = dizin;
            watcher.Filter = "*.*";

            watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            watcher.IncludeSubdirectories = true;
            watcher.EnableRaisingEvents = true;

            watcher.Changed += new FileSystemEventHandler(OnChanged);
            watcher.Created += new FileSystemEventHandler(OnCreated);
            watcher.Deleted += new FileSystemEventHandler(OnDeleted);
            watcher.Renamed += new RenamedEventHandler(OnRenamed);
        }

        private void OnChanged(object source, FileSystemEventArgs e)
        {
            try
            {
                if (vrs.Count > 10000) vrs.Clear();
                user_name = System.IO.File.GetAccessControl(e.FullPath).GetOwner(typeof(System.Security.Principal.NTAccount)).ToString();
                List<string> satir = new List<string>() {
                    user_name,
                    e.FullPath,
                    "değişti",
                    DateTime.Now.ToShortDateString()
                };
                vrs.Add(satir);

                ListViewItem lvi = new ListViewItem();
                lvi.Text = user_name;
                lvi.SubItems.Add(e.FullPath);
                lvi.SubItems.Add("değişti");
                lvi.SubItems.Add(DateTime.Now.ToShortDateString());
                verilistesi.Items.Add(lvi);
            }
            catch { }
        }

        private void OnRenamed(object source, RenamedEventArgs e)
        {
            try
            {
                user_name = System.IO.File.GetAccessControl(e.FullPath).GetOwner(typeof(System.Security.Principal.NTAccount)).ToString();
                List<string> satir = new List<string>() {
                    user_name,
                    e.FullPath,
                    e.FullPath + " olarak adlandırıldı",
                    DateTime.Now.ToShortDateString()
                };
                vrs.Add(satir);

                ListViewItem lvi = new ListViewItem();
                lvi.Text = user_name;
                lvi.SubItems.Add(e.OldFullPath);
                lvi.SubItems.Add(e.FullPath + " olarak adlandırıldı");
                lvi.SubItems.Add(DateTime.Now.ToShortDateString());
                verilistesi.Items.Add(lvi);
            }
            catch { }
        }

        private void OnCreated(object source, FileSystemEventArgs e)
        {
            try
            {
                user_name = System.IO.File.GetAccessControl(e.FullPath).GetOwner(typeof(System.Security.Principal.NTAccount)).ToString();
                List<string> satir = new List<string>() {
                    user_name,
                    e.FullPath,
                    "oluşturuldu",
                    DateTime.Now.ToShortDateString()
                };
                vrs.Add(satir);

                ListViewItem lvi = new ListViewItem();
                lvi.Text = user_name;
                lvi.SubItems.Add(e.FullPath);
                lvi.SubItems.Add("oluşturuldu");
                lvi.SubItems.Add(DateTime.Now.ToShortDateString());
                verilistesi.Items.Add(lvi);
            }
            catch { }
        }

        private void OnDeleted(object source, FileSystemEventArgs e)
        {
            try
            {
                user_name = System.IO.File.GetAccessControl(e.FullPath).GetOwner(typeof(System.Security.Principal.NTAccount)).ToString();
                List<string> satir = new List<string>() {
                    user_name,
                    e.FullPath,
                    "silindi",
                    DateTime.Now.ToShortDateString()
                };
                vrs.Add(satir);

                ListViewItem lvi = new ListViewItem();
                lvi.Text = user_name;
                lvi.SubItems.Add(e.FullPath);
                lvi.SubItems.Add("silindi");
                lvi.SubItems.Add(DateTime.Now.ToShortDateString());
                verilistesi.Items.Add(lvi);
            }
            catch { }
        }

        private void aramaTBX_KeyUp(object sender, KeyEventArgs e)
        {
            TextBox tbx = (TextBox)sender;
            if (e.KeyCode == Keys.Enter)
            {
                if (!string.IsNullOrEmpty(tbx.Text))
                {
                    watcher.EndInit();
                    verilistesi.Items.Clear();
                    foreach (var item in vrs)
                    {
                        if (item.Contains(tbx.Text))
                        {
                            ListViewItem lvi = new ListViewItem();
                            lvi.Text = item[0];
                            lvi.SubItems.Add(item[1]);
                            lvi.SubItems.Add(item[2]);
                            lvi.SubItems.Add(item[3]);
                            verilistesi.Items.Add(lvi);
                        }
                    }
                }
                else
                {
                    verilistesi.Items.Clear();
                    oku();
                }
            }
        }

 

Derlenmiş halde yüklemek isteyenler bu linki kullanabilir.

 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir