コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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");
            }
        }
コード例 #4
0
        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");
            }
        }
コード例 #5
0
        } // 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
コード例 #6
0
        } // 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
コード例 #7
0
        } // 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
コード例 #8
0
        } // 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
コード例 #9
0
        } // 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
コード例 #10
0
        } // 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
コード例 #11
0
        /// <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);
                    }
                }
            }
        }