/// <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); }