private pliki plikiKatalog() { pliki p = new pliki(new List<pojedynczyPlik>()); try { DirectoryInfo di = new DirectoryInfo(folder); FileInfo[] files = di.GetFiles(); foreach (FileInfo fi in files) p.plik.Add(new pojedynczyPlik(fi.Name, "")); } catch (Exception) { MessageBox.Show("Nie mozna pobrac listy plikow"); } return p; }
public zarzadca() { names = new XmlSerializerNamespaces(); names.Add("", ""); if (!File.Exists("pliki.xml")) { TextWriter sw = new StreamWriter("pliki.xml", false); pliki p = new pliki(new List<pojedynczyPlik>()); XmlSerializer xml = new XmlSerializer(typeof(pliki)); xml.Serialize(sw, p, names); sw.Close(); } }
/// <summary> /// Konstruktor klasy, inicjalizuje wszystkie zmienne oraz tworzy katalog użytkownika jeżeli nie istnieje /// </summary> /// <param name="kom">Zmienna do obsługi sieciowej</param> /// <param name="ni">Zmienna ikony traya</param> /// <param name="b">Zmienna z obsługą błędów</param> /// <param name="fol">Folder użytkownika</param> public zarzadca(komunikacja kom,NotifyIcon ni,int b,string fol) { folder = fol; k = kom; k.folder = folder; kontrolaBledow = b; notify = ni; folderMutex = new Mutex(); mutex = new Mutex(); names = new XmlSerializerNamespaces(); names.Add("", ""); login = k.Login; if (!Directory.Exists(login)) Directory.CreateDirectory(k.Login); if (!File.Exists(login + @"/" + "pliki.xml")) { TextWriter sw = new StreamWriter(login + @"/" + "pliki.xml", false); pliki p = new pliki(new List<pojedynczyPlik>()); XmlSerializer xml = new XmlSerializer(typeof(pliki)); xml.Serialize(sw, p, names); sw.Close(); } }
/// <summary> /// Funkcja sprawdza jakie zmieny nastąpiły na dysku lub serwerze i w zależności od tego jakie pliki się pojawiły podejmuje odpowiednią akcję /// </summary> public void szukajZmian() { mutex.WaitOne(); folderMutex.WaitOne(); List<plikInfo> plikiNaSerwerze; try { plikiNaSerwerze = k.downloadListy(""); } catch (Exception ex) { switch (kontrolaBledow) { case 0: wyswietlBlad(ex.ToString()); break; case 1: zapiszBlad(ex.ToString()); break; case 2: MessageBox.Show(ex.ToString()); break; } return; } if (plikiNaSerwerze == null) plikiNaSerwerze = new List<plikInfo>(); if (plikiNaSerwerze == null) return; pliki plikiLokalnieZapis = plikiZapisane(); pliki plikiLokalnieKat = new pliki(); plikiKatalog("", plikiLokalnieKat); if (plikiLokalnieKat == null || plikiLokalnieZapis == null) return; List<plikInfo> roznicaSerwerLok = sprawdzRoznicaDownload(plikiNaSerwerze, plikiLokalnieZapis, plikiLokalnieKat); List<pojedynczyPlik> roznicaLokSerwer = sprawdzRoznicaUpload(plikiNaSerwerze, plikiLokalnieZapis, plikiLokalnieKat); List<pojedynczyPlik> roznicaLokKat = sprawdzRoznicaUsunSerwer(plikiNaSerwerze, plikiLokalnieZapis, plikiLokalnieKat); List<pojedynczyPlik> plikiDoWykasowania = sprawdzRoznicaUsunKatalog(plikiNaSerwerze, plikiLokalnieZapis, plikiLokalnieKat); List<pojedynczyPlik> plikiDoAktualizacjiS = sprawdzAktualizacje(plikiLokalnieZapis, plikiLokalnieKat, plikiNaSerwerze); List<plikInfo> plikiDoAktualizacjiK = sprawdzAktualizacje(plikiNaSerwerze, plikiLokalnieZapis, plikiLokalnieKat); List<plikInfo> p = new List<plikInfo>(); if (roznicaSerwerLok.Count != 0) { odbierzPliki(roznicaSerwerLok); } if (roznicaLokSerwer.Count != 0) { try { wyslijPlik(roznicaLokSerwer); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } if (roznicaLokKat.Count != 0) usunPliki(roznicaLokKat); if (plikiDoWykasowania.Count != 0) wykasujPlik(plikiDoWykasowania); if (plikiDoAktualizacjiK.Count != 0) odbierzPliki(plikiDoAktualizacjiK); if (plikiDoAktualizacjiS.Count != 0) wyslijPlik(plikiDoAktualizacjiS); zapiszInfoPlikow(); folderMutex.ReleaseMutex(); mutex.ReleaseMutex(); }
/// <summary> /// Sprawdza które pliki należy usunąć z serwera /// </summary> /// <param name="serwer">Pliki na serwerze</param> /// <param name="plik">Pliki zapisane w pliku konfiguracyjnym</param> /// <param name="katalog">Pliki w katalogu</param> /// <returns>Lista plików do usunięcia</returns> private List<pojedynczyPlik> sprawdzRoznicaUsunSerwer(List<plikInfo> serwer, pliki plik, pliki katalog) { List<pojedynczyPlik> lista = new List<pojedynczyPlik>(); foreach (plikInfo pSerwer in serwer) { pojedynczyPlik pPlik = plik.plik.Find(delegate(pojedynczyPlik p) { return p.nazwa == pSerwer.nazwa; }); pojedynczyPlik pKatalog = katalog.plik.Find(delegate(pojedynczyPlik p) { return p.nazwa == pSerwer.nazwa; }); if (pPlik != null && pKatalog == null) lista.Add(pPlik); } return lista; }
/// <summary> /// Sprawdza które pliki należy wysłać na serwer /// </summary> /// <param name="serwer">Pliki na serwerze</param> /// <param name="plik">Pliki zapisane w pliku konfiguracyjnym</param> /// <param name="katalog">Pliki w katalogu</param> /// <returns>Lista plików wysłania</returns> private List<pojedynczyPlik> sprawdzRoznicaUpload(List<plikInfo> serwer, pliki plik, pliki katalog) { List<pojedynczyPlik> lista = new List<pojedynczyPlik>(); foreach (pojedynczyPlik pKatalog in katalog.plik) { pojedynczyPlik pPlik = plik.plik.Find(delegate(pojedynczyPlik p) { return p.nazwa == pKatalog.nazwa; }); plikInfo pSerwer = serwer.Find(delegate(plikInfo p) { return p.nazwa == pKatalog.nazwa; }); if (pPlik != null && pSerwer != null) continue; lista.Add(pKatalog); } return lista; }
/// <summary> /// Sprawdza które pliki należy ściągnąć z serwera /// </summary> /// <param name="serwer">Pliki na serwerze</param> /// <param name="plik">Pliki zapisane w pliku konfiguracyjnym</param> /// <param name="katalog">Pliki w katalogu</param> /// <returns>Lista plików do ściągnięcia</returns> private List<plikInfo> sprawdzRoznicaDownload(List<plikInfo> serwer, pliki plik, pliki katalog) { List<plikInfo> lista = new List<plikInfo>(); foreach (plikInfo pSerwer in serwer) { pojedynczyPlik pPlik = plik.plik.Find(delegate(pojedynczyPlik p) { return p.nazwa == pSerwer.nazwa; }); pojedynczyPlik pKatalog = katalog.plik.Find(delegate(pojedynczyPlik p) { return p.nazwa == pSerwer.nazwa; }); if (pPlik != null || pKatalog != null) continue; lista.Add(pSerwer); } return lista; }
/// <summary> /// Sprawdza jakie są różnice pomiędzy plikami na serwerze i w katalogu /// </summary> /// <param name="plik">Lista plikow w pliku konfiguracyjnym</param> /// <param name="katalog">Lista plików w katalogu</param> /// <param name="serwer">Lista plików na serwerze</param> /// <returns>Lista plików do aktualizacji</returns> private List<plikInfo> sprawdzAktualizacje(List<plikInfo> serwer, pliki plik, pliki katalog) { List<plikInfo> tmp = new List<plikInfo>(); foreach (pojedynczyPlik pPlik in plik.plik) { pojedynczyPlik pKatalog = katalog.plik.Find(delegate(pojedynczyPlik p) { return p.nazwa == pPlik.nazwa; }); plikInfo pSerwer = serwer.Find(delegate(plikInfo p) { return p.nazwa == pPlik.nazwa; }); if (pKatalog == null || pSerwer == null) continue; if (pKatalog.hash == pSerwer.hash && pKatalog.hash == pPlik.hash && pSerwer.hash == pPlik.hash) continue; if (pSerwer.hash != pPlik.hash && pSerwer.hash != pKatalog.hash && pKatalog.hash == pPlik.hash) tmp.Add(pSerwer); if (pSerwer.hash != pPlik.hash && pSerwer.hash != pKatalog.hash && pKatalog.hash != pPlik.hash) if (pSerwer.data > pKatalog.data) tmp.Add(pSerwer); } return tmp; }
/// <summary> /// Pobiera listę plików z pliku konfiguracyjnego /// </summary> /// <returns>Zmienna przechowująca wszystkie pliki zapisane</returns> private pliki plikiZapisane() { pliki plikiLokalnie = new pliki(new List<pojedynczyPlik>()); try { TextReader plikXml = new StreamReader(login + "/pliki.xml"); XmlSerializer xml = new XmlSerializer(typeof(pliki)); plikiLokalnie = (pliki)xml.Deserialize(plikXml); plikXml.Close(); } catch (Exception) { string str = "Nie mozna pobrac pliku konfiguracyjnego\r\n"; switch (kontrolaBledow) { case 0: wyswietlBlad(str); break; case 1: zapiszBlad(str); break; case 2: MessageBox.Show(str); break; } } return plikiLokalnie; }
/// <summary> /// Zprawdza jakie pliki są w katalogu /// </summary> /// <param name="katalog">Katalog w którym ma sprawdzać</param> /// <param name="lista">Lista plików jakie się znajdują w katalogu</param> private void plikiKatalog(string katalog, pliki lista) { if (lista == null) return; try { string tmpKatalog = folder + ((folder[folder.Length - 1] == '/') ? "" : "/") + katalog; DirectoryInfo di = new DirectoryInfo(tmpKatalog); FileInfo[] files = di.GetFiles(); foreach (FileInfo fi in files) lista.plik.Add(new pojedynczyPlik((long)(fi.LastWriteTime - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds, katalog + (katalog == "" ? "" : "/") + fi.Name, hashPliku(tmpKatalog + "/" + fi.Name))); foreach (DirectoryInfo diTmp in di.GetDirectories()) plikiKatalog(katalog + (katalog==""?"":"/") + diTmp.Name, lista); } catch (Exception ex) { string str = "Nie mozna pobrac listy plikow z katalogu " + katalog + "\r\n" + ex.ToString(); switch (kontrolaBledow) { case 0: wyswietlBlad(str); break; case 1: zapiszBlad(str); break; case 2: MessageBox.Show(str); break; } } }
/// <summary> /// Zapisuje do pliku konfiguracyjnego wszystkie pliki znajdujące się w katalogu /// </summary> public void zapiszInfoPlikow() { pliki p = new pliki(); plikiKatalog("", p); TextWriter sw = new StreamWriter(login + "/pliki.xml", false); XmlSerializer xml = new XmlSerializer(typeof(pliki)); xml.Serialize(sw, p, names); sw.Close(); }
private void zapiszInfoPlikow() { DirectoryInfo di = new DirectoryInfo(folder); FileInfo[] files = di.GetFiles(); List<pojedynczyPlik> pp = new List<pojedynczyPlik>(); foreach (FileInfo fi in files) { FileStream fs = new FileStream(folder + "//" + fi.Name, FileMode.Open); MD5 md5 = new MD5CryptoServiceProvider(); byte[] hash = md5.ComputeHash(fs); fs.Close(); pp.Add(new pojedynczyPlik(fi.Name, ""));//Encoding.ASCII.GetString(hash))); } TextWriter sw = new StreamWriter("pliki.xml", false); pliki p = new pliki(pp); XmlSerializer xml = new XmlSerializer(typeof(pliki)); xml.Serialize(sw, p, names); sw.Close(); }
private List<pojedynczyPlik> sprawdzRoznice(pliki plikiDoPorownywania, pliki plikiPorownywane) { List<pojedynczyPlik> ret = new List<pojedynczyPlik>(); foreach (pojedynczyPlik p in plikiDoPorownywania.plik) { bool jest = false; foreach (pojedynczyPlik p2 in plikiPorownywane.plik) { int comp = p.nazwa.CompareTo(p2.nazwa); if (comp == 0) { jest = true; break; } if (comp < 0) break; } if (!jest) ret.Add(p); } return ret; }
/*private void usunPlikiSerwer(List<pojedynczyPlik> plikiDoUsuniecia) { foreach (pojedynczyPlik p in plikiDoWyslania) { FileInfo fi = new FileInfo(folder + "//" + p.nazwa); k.uploadFile(p.nazwa, fi.LastWriteTime, (int)fi.Length); } }*/ private pliki plikiZapisane() { pliki plikiLokalnie = new pliki(new List<pojedynczyPlik>()); try { TextReader plikXml = new StreamReader("pliki.xml"); XmlSerializer xml = new XmlSerializer(typeof(pliki)); plikiLokalnie = (pliki)xml.Deserialize(plikXml); plikXml.Close(); } catch (Exception ex) { MessageBox.Show("Nie mozna bylo odczytac pliku konfiguracyjnego: " + ex.ToString()); } return plikiLokalnie; }
/// <summary> /// Obsluga przycisku zapisującego ustawienia. Ustawienia są zapisywane do pliku. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnZapisz_Click(object sender, EventArgs e) { if (sekundy < 10) { MessageBox.Show("Liczba sekund nie moze byc mniejsza niz 10"); return; } sekundy = Int32.Parse(txtSekundy.Text); if (!Directory.Exists(txtSciezka.Text)) Directory.CreateDirectory(txtSciezka.Text); int tmp; if (chbProxy.Checked && (txtSerwer.Text == "" || txtPort.Text == "" || !Int32.TryParse(txtPort.Text, out tmp))) { MessageBox.Show("Ustaw poprawnie proxy"); return; } if (chbProxy.Checked && chbUwierzytelnienie.Checked && (txtLogin.Text == "" || txtHaslo.Text == "")) { MessageBox.Show("Ustaw poprawnie proxy"); return; } if (chbProxy.Checked) { WebProxy wp = new WebProxy(txtSerwer.Text + ":" + txtPort.Text, chbUwierzytelnienie.Checked); if (chbUwierzytelnienie.Checked) wp.Credentials = new NetworkCredential(txtLogin.Text, txtHaslo.Text); WebRequest.DefaultWebProxy = wp; } else { WebRequest.DefaultWebProxy = null; } try { XmlSerializer xml = new XmlSerializer(typeof(ustawienia_uzytkownika)); ustawienia_uzytkownika gu = new ustawienia_uzytkownika(chbProxy.Checked ? 1 : 0, txtSerwer.Text, txtPort.Text==""?-1:Int32.Parse(txtPort.Text), chbUwierzytelnienie.Checked ? 1 : 0, txtLogin.Text, txtHaslo.Text, txtSciezka.Text, sekundy, radioLog.Checked ? 1 : radioPopup.Checked ? 2 : radioTray.Checked ? 0 : -1); TextWriter tw = new StreamWriter(KomClass.Login + "/ustawienia.ini"); xml.Serialize(tw, gu, names); tw.Close(); } catch (Exception ex) { MessageBox.Show("Nie mozna bylo zapisac ustawien"+ex.ToString()); } z.zmianaKontroli(radioLog.Checked ? 1 : radioPopup.Checked ? 2 : radioTray.Checked ? 0 : -1); Thread zmianaF = new Thread(new ParameterizedThreadStart(zmianaFolderu)); bledyKontrola = radioLog.Checked ? 1 : radioPopup.Checked ? 2 : radioTray.Checked ? 0 : -1; if (fol != txtSciezka.Text) { pliki p = new pliki(); TextWriter sw = new StreamWriter(KomClass.Login + "/pliki.xml", false); XmlSerializer xml = new XmlSerializer(typeof(pliki)); xml.Serialize(sw, p, names); sw.Close(); } fol = txtSciezka.Text; zmianaF.Start(txtSciezka.Text); }