/// <summary> /// liefert die aktuellen Dateidaten (über den <see cref="BinaryReaderWriter"/> des Dateisystems oder aus der Backup-Datei) /// <para>Wegen der Funktion Stream.Read() darf die internen Datei nicht größer als 0x3FFFFFFF (2 GB) sein.</para> /// <para>Wenn der IMG-BinaryReaderWriter geliefert wird, werden die Datei-Daten in einen neuen Speicherbereich kopiert und dieser geliefert.</para> /// </summary> /// <param name="file"></param> /// <param name="br"></param> /// <returns></returns> protected byte[] getFiledata(FileProps file, BinaryReaderWriter br) { if (br == null || preblocks4read < 0 || File.Exists(file.Backgroundfile)) { if (File.Exists(file.Backgroundfile)) { return(File.ReadAllBytes(file.Backgroundfile)); } // dann ex. noch keine Daten return(new byte[0]); } else { if (br != null && preblocks4read > 0) // aus dem Originalstream Daten einlesen { byte[] data = new byte[file.Filesize]; // neuer Speicherbereich UInt16[] blocks = file.PseudoFileBlocks(); for (int i = 0; i < blocks.Length; i++) { int offset = ImgHeader.FileBlockLength * i; br.Seek(ImgHeader.FileBlockLength * (long)(preblocks4read + blocks[i])); br.BaseStream.Read(data, offset, file.Filesize - offset >= ImgHeader.FileBlockLength ? ImgHeader.FileBlockLength : (int)file.Filesize - offset); } return(data); } } return(null); }
private Boolean getFile(string fileName) { FileProps get = new FileProps { action = "file", token = client.tokenID, task = taskID, file = fileName }; jsonClass jsC = new jsonClass { debugFlag = debugFlag, connectURL = client.connectURL }; string jsonString = jsC.toJson(get); string ret = jsC.jsonSend(jsonString); if (jsC.isJsonSuccess(ret)) { string fileDl = jsC.getRetVar(ret, "url"); { downloadClass dlHdl = new downloadClass(); string dlFrom = Path.Combine(prefixServerdl, jsC.getRetVar(ret, "url")); string dlTo = Path.Combine(filepath, fileName); dlHdl.DownloadFile(dlFrom, dlTo); Console.WriteLine("Finished downloading file"); //Check if file exists. check if return success return(true); } } return(false); }
private void OpenExplorer(object sender, RoutedEventArgs e) { FileProps row = (FileProps)((Button)e.Source).DataContext; try { Process.Start("explorer.exe", System.IO.Path.GetDirectoryName(row.FullPath)); } catch (Exception ex) { MessageBox.Show($"Error: {ex.Message}", "Error"); } }
private void AddToNoScanList(object sender, RoutedEventArgs e) { var button = (Button)e.Source; FileProps row = (FileProps)button.DataContext; try { if (!Configuration.PathsNotToScan.Contains(row.FullPath)) { Configuration.PathsNotToScan.Add(row.FullPath); } row.IsScanable = false; } catch (Exception ex) { MessageBox.Show($"Error: {ex.Message}", "Error"); } }
} // DataGridMain_MouseDoubleClick /// <summary>Когда отпускаешь левую кнопку мыши на ДатаГриде</summary> private void DataGridMain_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { try { if (DataGridMain.SelectedItem == null) { return; } else if ((DataGridMain.SelectedItem as FileProps).Extension != "Папка с файлами") { FileProps temp = (DataGridMain.SelectedItem as FileProps); if (temp.Length < 20) { _data = File.ReadAllText(temp.FullName); TextBoxMain.Text = _data; } else { TextBoxMain.Text = "Похоже, что файл слишком велик. \nБыстрый просмотр возможен только текстовых файлов."; } // if-else } // if-else } catch (Exception) { TextBoxMain.Text = "Невозможно прочесть данный файл..."; return; } // try-catch } // DataGridMain_MouseLeftButtonUp
} // ShowFilesAndDirs /// <summary>Получить список папок /// Для взаимодействия с методом используется поле в главном окне</summary> public void GetDirList(string path) { var temp = Proxy.GetDirectoryList(path); foreach (FileProps item in temp) { Dirs.Add(item); } // foreach foreach (FileProps item in Dirs) { FileProps prop = new FileProps { Name = item.Name, FullName = item.FullName, CreationTime = item.CreationTime, Extension = item.Extension, Length = item.Length }; ServerFS.Add(prop); } // foreach } // GetDirList
} // GetDirList /// <summary>Получить список папок /// Для взаимодействия с методом используется поле в главном окне</summary> public void GetFileList(string path) { var temp = Proxy.GetFileList(path); foreach (var item in temp) { Files.Add(item); } // foreach foreach (FileProps item in Files) { FileProps prop = new FileProps { Name = item.Name, FullName = item.FullName, CreationTime = item.CreationTime, Extension = item.Extension, Length = ((item.Length / 1024) / 1024) }; ServerFS.Add(prop); } // foreach } // GetFileList
} // GetDirList /// <summary>Получить список папок. /// Для взаимодействия с методом используется поле в главном окне.</summary> private void GetFileList(string path) { FileProps[] temp = _webservice.GetFileList(path); foreach (var item in temp) { _files.Add(item); } // foreach foreach (FileProps item in _files) { FileProps prop = new FileProps { Name = item.Name, FullName = item.FullName, CreationTime = item.CreationTime, Extension = item.Extension, Length = ((item.Length/1024)/1024) }; _serverFS.Add(prop); } // foreach } // GetFileList
} // ShowFilesAndDirs /// <summary>Получить список папок. /// Для взаимодействия с методом используется поле в главном окне.</summary> private void GetDirList(string path) { FileProps[] temp = _webservice.GetDirectoryList(path); foreach (FileProps item in temp) { _dirs.Add(item); } // foreach foreach (FileProps item in _dirs) { FileProps prop = new FileProps { Name = item.Name, FullName = item.FullName, CreationTime = item.CreationTime, Extension = item.Extension, Length = item.Length }; _serverFS.Add(prop); } // foreach } // GetDirList
} // DataGridMain_DragEnter private void DataGridMain_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { if (DataGridMain.SelectedItem != null) { // Цепляем выбранный файл FileProps fp = DataGridMain.SelectedItem as FileProps; // Декомпрессим файл на сервере (на сервере создаётся его расжатая копия) Basic.Proxy.DecompressFile(fp.FullName); // Которая в последствии и "вытаскивает" пользователь // Сделал так т.к. понятия не имею, как можно по средствам // Drag&Drop создать в месте куда перетаскивается файл сам файл. // Расжать файл в MemoryStream, а из MemeryStream этот файл нужно // как-то создать и нужен хотя бы путь места куда происходит Drop. // Вопрос: откуда этот путь взять? // Получаем файл уже у клиента посредствам перетаскивания // Передаваемые данные. Представляет базовую реализацию IDataObject DataObject data = new DataObject(); // Коллекция строк с нашими выделенными объектами, а точнее // переносить будем расжатую копию StringCollection fileDropList = new StringCollection { fp.FullName+"~" }; // Список перенесённых данных указывается в виде коллекции строк data.SetFileDropList(fileDropList); // Сохраняет указанные данные в этом объекте данных data.SetData("NFS", 0); // Инициирует операцию перетаскивания мышью DragDrop.DoDragDrop(DataGridMain, data, DragDropEffects.Copy); // Удаляем расжатую копию Basic.Proxy.DeleteFile(fp.FullName + "~"); } // if } // DataGridMain_MouseDown
/// <summary> /// liest das gesamte Dateisystem (aber ohne die Daten interner Dateien) ein und "behält" den <see cref="BinaryReaderWriter"/> /// <para>Der Dateiinhalt wird immer nur bei Bedarf eingelesen.</para> /// </summary> /// <param name="br"></param> public void Read(BinaryReaderWriter br) { binreader = br; // Header einlesen binreader.Seek(0); ImgHeader.Read(binreader); List <FATBlock> root = new List <FATBlock>(); List <FATBlock> fat = new List <FATBlock>(); // gesamte FAT einlesen int sumfatblocks = -1; while (sumfatblocks != 0) { FATBlock bl = new FATBlock((uint)ImgHeader.FATBlockLength); bl.Read(binreader); if (sumfatblocks < 0) { sumfatblocks = ((int)bl.Filesize - ImgHeader.HeaderLength) / ImgHeader.FATBlockLength; // Anzahl der FAT-Blocks aus dem 1. Block ("Dateigröße") ermitteln } if (bl.FullName == ".") { root.Add(bl); } else { fat.Add(bl); } sumfatblocks--; } // Dateiliste erzeugen file4block.Clear(); Files.Clear(); preblocks4read = (UInt16)(root[0].Filesize / ImgHeader.FileBlockLength); // Anzahl der Datenblöcke bis zum Start des echten Dateiinhaltbereiches if (root[0].Filesize % ImgHeader.FileBlockLength != 0) { preblocks4read++; } FATSize = (int)root[0].Filesize - ImgHeader.HeaderLength; for (int block = 0; block < fat.Count; block++) { FATBlock bl = fat[block]; if (bl.Used) { FileProps file; if (bl.Part == 0) { string name = bl.FullName; if (name != ".") { file = new FileProps(name, bl.Filesize, string.IsNullOrEmpty(backgroundpath) ? null : getBackFilename(name)); Files.Add(file); } } int fileidx = Files.Count - 1; file = Files[fileidx]; for (int j = 0; j < bl.BlockNumberCount; j++) // alle Blocknummern registrieren { UInt16 blockno = (UInt16)(bl.GetBlockNumber(j) - preblocks4read); file.PseudoFileBlockAdd(blockno); // 0-basierte Blocknummern speichern file4block.Add(blockno, fileidx); } } } }