/// <summary> /// /// </summary> /// <param name="dateDir_path"></param> /// <param name="filename">[0]-pm15, [1]-pm24</param> public void ReadLocalDirDateFiles(string dateDir_path, string[] filename) { string Dir24pm, Dir15pm; #region Check Dir24pm 15pm if (Directory.Exists(dateDir_path + "\\" + pm24Dir)) Dir24pm = dateDir_path + "\\" + pm24Dir; else Dir24pm = ""; if (Directory.Exists(dateDir_path + "\\" + pm15Dir)) Dir15pm = dateDir_path + "\\" + pm15Dir; else Dir15pm = ""; #endregion #region read24 files if (File.Exists(Dir24pm+"/"+filename[1])) { Invoke(new Action<int>(s => nFiles += s),1); ReadPM pm24 = new ReadPM(Dir24pm, filename[1]);//считали и проанализировали локальный файл BASE.AddNE(pm24); c_pm24++; } #endregion #region read15 files if (File.Exists(Dir15pm + "/" + filename[0])) { Invoke(new Action<int>(s => nFiles += s), 1); PM15 pm15 = new PM15(Dir15pm + "/" + filename[0]);//считали и проанализировали локальный файл BASE.AddNE(pm15); c_pm15++; } #endregion }
public NE(PM15 PM) { this.NE_Name = PM.NE_Name; this.File24path = ""; this.File15path = PM.Filename; Ports = PM.Ports; ISPM15 = true; }
//add info for pm15 public bool AddNE(PM15 pm) { int index = this.NeList.FindIndex(x => x.NE_Name == pm.NE_Name && x.ISPM15); if (index != -1)//Exist NE { this.NeList[index].AddInfo(pm); return(true); } else { this.AddNewNE(new NE(pm)); return(false); } }
public void ReadLocalDirDateFiles(string dateDir_path) { string Dir24pm, Dir15pm; #region Check Dir24pm 15pm if (Directory.Exists(dateDir_path + "\\" + pm24Dir)) Dir24pm = dateDir_path + "\\" + pm24Dir; else Dir24pm = ""; if (Directory.Exists(dateDir_path + "\\" + pm15Dir)) Dir15pm = dateDir_path + "\\" + pm15Dir; else Dir15pm = ""; #endregion string[] Files24 = String.IsNullOrWhiteSpace(Dir24pm)?new string[0]:Directory.GetFiles(Dir24pm); //список файлов статистики string[] Files15 = String.IsNullOrWhiteSpace(Dir15pm) ? new string[0] : Directory.GetFiles(Dir15pm); //список файлов статистики #region read24 files if (!String.IsNullOrWhiteSpace(Dir24pm)&& Files24.Any()) { Invoke(new Action<int>(s => nFiles += s), Files24.Count()); ReadPM pm24; foreach (var File in Files24) { //перебор файлов в конечной папке//заносим инфу из каждого файла в структуру BASE var file = File.Split('\\').Last(); pm24 = new ReadPM(Dir24pm, file);//считали и проанализировали локальный файл BASE.AddNE(pm24); c_pm24++; } } #endregion #region read15 files if (!String.IsNullOrWhiteSpace(Dir15pm)&& Files15.Any()) { Invoke(new Action<int>(s => nFiles += s), Files15.Count()); PM15 pm15; foreach (var File in Files15) { //перебор файлов в конечной папке//заносим инфу из каждого файла в структуру BASE pm15 = new PM15(File);//считали и проанализировали локальный файл //if (pm15.HaveErrors) MessageBox.Show(pm15.NE_Name + Environment.NewLine + File); BASE.AddNE(pm15); c_pm15++; } } #endregion }
public void AddInfo(PM15 PM) { try { if (PM.NE_Name == this.NE_Name) { int nPort; int nStat; foreach (var port in PM.Ports) { nPort = this.Ports.FindIndex(p => p.PortName == port.PortName); if (nPort == -1) { //такого порта нету, добавляем в список this.Ports.Add(port); } else //порта уже имеется {//проверяем наличие статы по дате на порту nPort foreach (var stat in port.Stat) { nStat = this.Ports[nPort].Stat.FindIndex(s => s.Date == stat.Date); if (nStat == -1) { //такой даты не найдено //добавляем stat в список данного порта nPort this.Ports[nPort].Stat.Add(stat); } } } } } } catch (Exception) { throw; } }
public void ReadAndCopyFiles(object O) { try { mutexObj.WaitOne();//wait until read dom100 Invoke(new Action<string>(s => button1.Text = s), "Работаю... Остановить?"); //Invoke(new Action<bool>(s => button1.Enabled = s), false); Invoke(new Action<bool>(s => button2.Enabled = s), false); Invoke(new Action<bool>(s => listBox1.Enabled = s), false); string PM_path_server = (string)O; string currentDOM = ""; if (PM_path_server.Split('\\').Last() == dom100) currentDOM = dom100; else currentDOM = dom101; FtpClient client = new FtpClient(); del Mydel = n => listBox1.Items.Add(n); #region Connection FTP //Задаём параметры клиента. client.PassiveMode = true; //Включаем пассивный режим. int TimeoutFTP = 30000; //Таймаут. string FTP_SERVER = Properties.Settings.Default.ftp_Address; // string FTP_SERVER = "127.0.0.1"; int FTP_PORT = Properties.Settings.Default.ftp_Port; //int FTP_PORT= 21; string FTP_USER = Properties.Settings.Default.ftp_User; string FTP_PASSWORD = Properties.Settings.Default.ftp_Pass; //Подключаемся к FTP серверу. Ping p = new Ping(); if (p.Send(FTP_SERVER).Status != IPStatus.Success) { MessageBox.Show("Адрес " + FTP_SERVER + " не доступен"); Invoke(new Action<string>(s => button1.Text = s), oldBut); Invoke(new Action<bool>(s => button1.Enabled = s), true); Invoke(new Action<bool>(s => button2.Enabled = s), true); Invoke(new Action<bool>(s => listBox1.Enabled = s), true); mutexObj.ReleaseMutex(); return; } client.Connect(TimeoutFTP, FTP_SERVER, FTP_PORT); client.Login(TimeoutFTP, FTP_USER, FTP_PASSWORD); #endregion //Меняет директорию на указанную. //Можно переходить вверх указав вместо имени папки ".." либо в любую папку расположенную в текущей. client.ChangeDirectory(TimeoutFTP, PM_path_server);//переход в директорию DOM100 //Получает список содержимого текущего каталога с FTP. var listftp = client.GetDirectoryList(TimeoutFTP); if (listftp.Count() == 0) { // MessageBox.Show("В каталоге " + PM_path_server+" ничего нет", "GetDirectoryList"); Invoke(new Action<string>(s => button1.Text = s), oldBut); //Invoke(new Action<bool>(s => button1.Enabled = s), true); Invoke(new Action<bool>(s => button2.Enabled = s), true); Invoke(new Action<bool>(s => listBox1.Enabled = s), true); mutexObj.ReleaseMutex(); return; } ReadPM pm24; NE NEstat; DateTime DirDate; int countErr = 0; string text;//строка отчета о количестве папок //перебор всех папок DirDate foreach (var ftpItem in listftp) { //перевод названия папки в дату if (ftpItem.ItemType != FtpItemType.Directory) continue; Invoke(new Action<int>(s => nDirsAll += s), 1); if (!DateTime.TryParseExact(ftpItem.Name, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DirDate)) { countErr += 1; continue; } if (countErr != 0) MessageBox.Show("Пропущено " + countErr + " папок при чтении с сервера"); //фильтр папок по дате if (DirDate.Date > FromDate.Date && (DirDate.Date + new TimeSpan(1, 0, 0, 0)) <= ToDate.Date) { // MessageBox.Show("папка " + ftpItem.Name + " прошла фильтр времени"); Invoke(new Action<int>(s => nDirs += s), 1); //copy Directories from server if (!Directory.Exists(DirLocal)) Directory.CreateDirectory(DirLocal); //пропуск существующих кроме последней string LocalDirdate = DirLocal + "/" + currentDOM + "/" + ftpItem.Name; var dirInfo = Directory.CreateDirectory(LocalDirdate);//date dir client.ChangeDirectory(TimeoutFTP, ftpItem.Name);//переход в директорию DirDate string dir24pm = ""; //имя промежуточной папки string dir15pm = ""; var listDir = client.GetDirectoryList(TimeoutFTP); //теперь в папке с датой, видим одну или две папки (pm15 or pm24) foreach (var dir in listDir) { if (dir.Name ==pm24Dir) { dir24pm = pm24Dir; Directory.CreateDirectory(dirInfo.FullName + "/" + dir24pm); } if (dir.Name == pm15Dir) { dir15pm = pm15Dir; Directory.CreateDirectory(dirInfo.FullName + "/" + dir15pm); } } FtpItem[] Files; string DestDir15 = DirLocal + "/" //pm + currentDOM + "/" + //dom100 dirInfo.Name + "/" + //dateDir pm15Dir + "/"; //Dir15pm string DestDir24 = DirLocal + "/" //pm + currentDOM + "/" + //dom100 dirInfo.Name + "/" + //dateDir pm24Dir + "/"; //read files pm24 if (!String.IsNullOrWhiteSpace(dir24pm))//Если есть папка pm24 { client.ChangeDirectory(TimeoutFTP, dir24pm);//зашли в папку ~PM24dir ~ Files = client.GetDirectoryList(TimeoutFTP); //список файлов статистики consts.invokeControlText(label4, "Server: " + DestDir24); foreach (var file in Files) {//заносим инфу из каждого файла в структуру BASE string FullDestFilePath = DestDir24 + file.Name; Invoke(new Action<int>(s => nFiles += s), 1); #region look local files // skip existing local files if (File.Exists(FullDestFilePath)) { BASE.AddNE(new ReadPM(DestDir24, file.Name)); continue; } #endregion if (file.Size == -1) continue; //copy file from server to local Dir client.GetFile(TimeoutFTP, FullDestFilePath, file.Name); pm24 = new ReadPM(DestDir24, file.Name);//считали и проанализировали локальный файл BASE.AddNE(pm24);//add to base c_pm24++; } client.ChangeDirectoryUp(TimeoutFTP);//in dirdate } //now into a Dirdate //read files pm15 if (!String.IsNullOrWhiteSpace(dir15pm)) { client.ChangeDirectory(TimeoutFTP, dir15pm);//зашли в папку ~PM15dir ~ Files = client.GetDirectoryList(TimeoutFTP); //список файлов статистики consts.invokeControlText(label4, "Server: " + DestDir15); foreach (var file in Files) {//заносим инфу из каждого файла в структуру BASE string FullDestFilePath = DestDir15 + file.Name; Invoke(new Action<int>(s => nFiles += s), 1); #region look local files // skip existing local files if (File.Exists(FullDestFilePath)) { BASE.AddNE(new PM15(FullDestFilePath)); continue; } #endregion if (file.Size == -1) continue; //copy file from server to local Dir client.GetFile(TimeoutFTP, FullDestFilePath, file.Name); var pm15 = new PM15(FullDestFilePath);//считали и проанализировали локальный файл BASE.AddNE(pm15);//add to base c_pm15++; } client.ChangeDirectoryUp(TimeoutFTP);//in dirdate // client.ChangeDirectoryUp(TimeoutFTP);//in dom100 }//if (pm15dir exist) client.ChangeDirectoryUp(TimeoutFTP);//up from dirdate } //Filter DATE } //foreach DirDates text = "Обработано файлов: " + nFiles + "; Скопировано с сервера = " + c_pm24.ToString() + "(pm24) и = " + c_pm15 + "(pm15). Всего =" + (c_pm24 + c_pm15).ToString(); consts.invokeControlText(label4, text); //Отключаемся от ФТП сервера client.Disconnect(TimeoutFTP); Invoke(new Action<string>(s => button1.Text = s), oldBut); // Invoke(new Action<bool>(s => button1.Enabled = s), true); Invoke(new Action<bool>(s => button2.Enabled = s), true); Invoke(new Action<bool>(s => listBox1.Enabled = s), true); mutexObj.ReleaseMutex(); if(currentDOM==dom101)needRefrash=true; } catch (Exception ex) { if (ex.Message != "Поток находился в процессе прерывания.") MessageBox.Show(ex.ToString(), ex.Message); Invoke(new Action<string>(s => button1.Text = s), oldBut); Invoke(new Action<bool>(s => button1.Enabled = s), true); Invoke(new Action<bool>(s => button2.Enabled = s), true); Invoke(new Action<bool>(s => listBox1.Enabled = s), true); mutexObj.ReleaseMutex(); needRefrash=true; } }