Ejemplo n.º 1
0
        public FileInfoForm(FAT16DirEntry entry)
        {
            InitializeComponent();

            this.MaximumSize = this.MinimumSize = this.Size;

            labelNombre.Text        = entry.NombreDeDir;
            labelFechaCreacion.Text = entry.GetFechaCreacionString();
            labelFechaMod.Text      = entry.GetFechaModificacionString();
            labelTamano.Text        = entry.GetDirSizeString() + " bytes";
            labelCluster.Text       = "" + entry.GetFirstCluster();
        }
Ejemplo n.º 2
0
        public ListViewFAT16Entry(FAT16DirEntry entry, String[] datos)
            : base(datos)
        {
            Entry             = entry;
            ListViewItemName  = datos[0];
            Tipo              = datos[1];
            TamanoArchivo     = datos[2];
            FechaCreacion     = datos[3];
            FechaModificacion = datos[4];
            ClusterNumber     = datos[5];

            if (entry.esDirectorio)
            {
                this.ImageIndex = 1;
            }
            else
            {
                this.ImageIndex = 3;
            }
        }
Ejemplo n.º 3
0
        public static ListViewFAT16Entry FactoryMethod(FAT16DirEntry entry)
        {
            String[] datos = new String[6];
            datos[0] = entry.GetDirName();
            datos[1] = entry.GetTipo();

            long FileSize = entry.GetDirSize();

            //KB
            if (FileSize >= (1024 * 1024 * 1024))
            {
                float tamano = FileSize / (1024 * 1024 * 1024);
                datos[2] = "" + tamano + " GB";
            }
            //MB
            else if (FileSize >= (1024 * 1024))
            {
                float tamano = FileSize / (1024 * 1024);
                datos[2] = "" + tamano + " MB";
            }
            //GB
            else if (FileSize >= 1024)
            {
                float tamano = FileSize / 1024;
                datos[2] = "" + tamano + " KB";
            }
            else
            {
                datos[2] = "" + FileSize + " bytes";
            }

            datos[3] = entry.GetFechaCreacionString();
            datos[4] = entry.GetFechaModificacionString();
            datos[5] = entry.GetFirstCluster().ToString();
            return(new ListViewFAT16Entry(entry, datos));
        }
Ejemplo n.º 4
0
        private void ParseDirectoryCluster(FAT16Directory dir, MemoryStream dirStream)
        {
            byte[] EntryByteBuffer = new byte[32];
            bool   LFNFlag         = false;

            while (dirStream.Read(EntryByteBuffer, 0, 32) > 0)
            {
                //0x00 y 0xE5 denotan que esa entrada esta libre
                if (EntryByteBuffer[0] != 0x00)
                {
                    if (EntryByteBuffer[11] == 0x0F)
                    {
                        //Entrada de directory LFN (Long File Name)
                        LFNFlag = true;

                        FAT16LFNEntry tempLFNEntry = new FAT16LFNEntry();

                        //Copiamos los datos de esa entrada de directory a una estructura LFN
                        tempLFNEntry.LDIR_Ord = EntryByteBuffer[0];
                        Array.Copy(EntryByteBuffer, 1, tempLFNEntry.LDIR_Name1, 0, 10);
                        tempLFNEntry.LDIR_ATTR     = EntryByteBuffer[11];
                        tempLFNEntry.LDIR_Type     = EntryByteBuffer[12];
                        tempLFNEntry.LDIR_Checksum = EntryByteBuffer[13];
                        Array.Copy(EntryByteBuffer, 14, tempLFNEntry.LDIR_Name2, 0, 12);
                        Array.Copy(EntryByteBuffer, 26, tempLFNEntry.LDIR_FstClustLO, 0, 2);
                        Array.Copy(EntryByteBuffer, 28, tempLFNEntry.LDIR_Name3, 0, 4);

                        TempLFNStack.Push(tempLFNEntry);
                    }
                    else
                    {
                        //Entrada de Directorio Normal
                        FAT16DirEntry tempDirEntry = new FAT16DirEntry();
                        if (EntryByteBuffer[0] == 0xE5)
                        {
                            tempDirEntry.ignoreEntry = true;
                        }
                        Array.Copy(EntryByteBuffer, 0, tempDirEntry.DIR_NAME, 0, 8);
                        Array.Copy(EntryByteBuffer, 8, tempDirEntry.DIR_EXT, 0, 3);
                        tempDirEntry.DIR_ATTR         = EntryByteBuffer[11];
                        tempDirEntry.DIR_NTRES        = EntryByteBuffer[12];
                        tempDirEntry.DIR_CrtTimeTenth = EntryByteBuffer[13];
                        Array.Copy(EntryByteBuffer, 14, tempDirEntry.DIR_CrtTime, 0, 2);
                        Array.Copy(EntryByteBuffer, 16, tempDirEntry.DIR_CrtDate, 0, 2);
                        Array.Copy(EntryByteBuffer, 18, tempDirEntry.DIR_LstAccDate, 0, 2);
                        Array.Copy(EntryByteBuffer, 20, tempDirEntry.DIR_FstClustHI, 0, 2);
                        Array.Copy(EntryByteBuffer, 22, tempDirEntry.DIR_WrtTime, 0, 2);
                        Array.Copy(EntryByteBuffer, 24, tempDirEntry.DIR_WrtDate, 0, 2);
                        Array.Copy(EntryByteBuffer, 26, tempDirEntry.DIR_FstClustLO, 0, 2);
                        Array.Copy(EntryByteBuffer, 28, tempDirEntry.DIR_FileSize, 0, 4);

                        //Clonar Stack de LFNs
                        if (LFNFlag && TempLFNStack.Count > 0)
                        {
                            tempDirEntry.ListaLFNEntries = new Stack <FAT16LFNEntry>(TempLFNStack);
                        }

                        if (TempLFNStack.Count > 0)
                        {
                            TempLFNStack.Clear();
                        }

                        //Agregar Entry a RootDirectory
                        dir.AddDirectory(tempDirEntry);
                    }
                }

                EntryByteBuffer = new byte[32];
            }

            //dir.ParseAllEntries();
        }