示例#1
0
        } /* UpdateSipperDriveStats */

        private void  Download_Click(object sender, EventArgs e)
        {
            UpdateAvailableBytes();
            SipperFileControlBlockList selectedFCBs = GetSelectedFiles();

            if (selectedFCBs.Count < 1)
            {
                MessageBox.Show("No files are selected");
                return;
            }

            CheckHardDriveTimer.Enabled = false; // While we are downloading;  we do not want to be periodically
                                                 // polling the hard drive.  That would interfere with the download.

            DownLoadFiles downLoadFiles = new DownLoadFiles(disk, selectedFCBs, destDir);

            downLoadFiles.ShowDialog();
            downLoadFiles.Dispose();
            downLoadFiles = null;

            UpdateAvailableBytes();

            for (int x = 0; x < SipperFileListView.Items.Count; x++)
            {
                FcbListViewItem        fcbLVI = (FcbListViewItem)SipperFileListView.Items[x];
                SipperFileControlBlock fcb    = fcbLVI.FCB;
                if (fcb.DownLoaded)
                {
                    fcbLVI.BackColor = Color.LightGray;
                }
            }

            CheckHardDriveTimer.Enabled = true;
        } /* Download_Click */
示例#2
0
 public FileCopyStats(SipperFileControlBlock _fcb,
                      ListViewItem _lvi
                      )
 {
     lvi           = _lvi;
     fcb           = _fcb;
     size          = fcb.FileSizeInBytes;
     copied        = 0;
     left          = fcb.FileSizeInBytes;
     updateDisplay = true;
     bytesSkipped  = 0;
     UpdateDisplayFields();
 }
示例#3
0
            public FcbListViewItem(SipperFileControlBlock _fcb) :
                base(_fcb.FileName)
            {
                fcb = _fcb;

                double fileSizeMeg = (double)(fcb.FileSizeInBytes) / 1000000.0;

                SubItems.Add(fcb.TimeStamp.ToString("yyyy/MMM/dd - HH:mm:ss"));
                SubItems.Add(fileSizeMeg.ToString("###,##0.00" + " Mb"));
                SubItems.Add(fcb.StartSector.ToString("###,###,##0"));
                SubItems.Add(fcb.EndSector.ToString("###,###,##0"));
                SubItems.Add(fcb.Desccription);
                if (fcb.DownLoaded)
                {
                    BackColor = Color.LightGray;
                }
            }
示例#4
0
        } /* UpdateSelectedBytes */

        private SipperFileControlBlockList  GetSelectedFiles()
        {
            SipperFileControlBlockList selectedFCBs = new SipperFileControlBlockList();

            ListView.CheckedListViewItemCollection checkedItems = SipperFileListView.CheckedItems;


            foreach (ListViewItem lvi  in  checkedItems)
            {
                SipperFileControlBlock fcb = ((FcbListViewItem)lvi).FCB;
                if (!fcb.DownLoaded)
                {
                    selectedFCBs.Add(fcb);
                }
            }

            return(selectedFCBs);
        } /* GetSelectedFiles */
示例#5
0
        } /* FcbListViewItem */



        protected void  ViewSipperFile(Object sender,
                                       EventArgs e
                                       )
        {
            //int  x = 7878;
            //SipperFileListView.Mou

            if (SipperFileListView.SelectedItems.Count == 1)
            {
                SipperFileControlBlock fcb = ((FcbListViewItem)SipperFileListView.SelectedItems[0]).FCB;
                SipperDiskFile         sdf = null;

                try
                {
                    sdf = disk.OpenSipperDiskFile(fcb.FcbIndex);
                }
                catch (Exception)
                {
                    MessageBox.Show("ViewSipperFile[" + fcb.FileName + "] Could not be opened");
                    return;
                }

                BufferedStream bs = new BufferedStream(sdf, 100 * 1024);
                SipperFileViewer.SipperFileViewer sfv = new SipperFileViewer.SipperFileViewer(bs, "SIPPER Disk Manager [" + fcb.FileName + "]", fcb.FileName);

                //SipperFileViewer.SipperFileViewer  sfv = new SipperFileViewer.SipperFileViewer (sdf, "SIPPER Disk Manager [" + fcb.FileName + "]", fcb.FileName);


                sfv.ShowDialog();
                sfv.Dispose();

                bs.Dispose();
                bs = null;

                sdf.Close();
                sdf.Dispose();
                sdf = null;
            }
        } /* ViewSipperFile */
示例#6
0
        } /* BuildFileListView */

        private void  CopyFileList()
        {
            int readBlockSizeMax = 100 * 1024;
            int readBlockSize    = readBlockSizeMax;
            int readErrorsInARow = 0;

            downLoadingRunning = true;

            byte[] buff = new byte[readBlockSizeMax];
            foreach (FileCopyStats fcs in  fileCopyStatsList)
            {
                SipperFileControlBlock fcb = fcs.Fcb;

                SipperDiskFile s = disk.OpenSipperDiskFile(fcb.FcbIndex);
                if (s == null)
                {
                    return;
                }

                fcs.Size = s.Length;

                string destFileName = OSservices.AddSlash(destDir) + fcs.FileName;
                destFileName = destFileName.Trim('\0') + ".spr";

                FileStream destFile = null;
                try
                {
                    destFile = new FileStream(destFileName, FileMode.Create, FileAccess.Write, FileShare.None);
                }
                catch (Exception e)
                {
                    MessageBox.Show("Error opening File[" + destFileName + "] occurred." + "\n\n" + e.ToString(),
                                    "CopyFileList",
                                    MessageBoxButtons.OK
                                    );
                    // We will try continuing on to the next file to download.
                    continue;
                }

                currentFCS = fcs;

                bool eof            = false;
                long nextReadOffset = 0;
                long bytesToSkipped = 0;

                while ((!downLoadingTerminate) && (!eof))
                {
                    int bytesRead = 0;
                    try
                    {
                        if (nextReadOffset != s.Position)
                        {
                            s.Seek(nextReadOffset, SeekOrigin.Begin);
                        }

                        bytesRead      = s.Read(buff, 0, readBlockSize);
                        nextReadOffset = s.Position;
                        if (bytesRead == 0)
                        {
                            eof = true;
                        }
                        else
                        {
                            // Since we did not have an error;  we might as well set the
                            // readBlockSize to its max
                            readBlockSize    = buff.Length;
                            readErrorsInARow = 0;
                            bytesToSkipped   = 0;
                        }
                    }
                    catch (Exception e)
                    {
                        DialogResult dr = MessageBox.Show("Disk Error Occurred trying to read SIPPER disk" + "\n\n" +
                                                          "Do you want to keep on reading?" + "\n\n" +
                                                          e.ToString(),
                                                          "CopyFileList",
                                                          MessageBoxButtons.YesNo
                                                          );
                        if (dr == DialogResult.No)
                        {
                            eof = true;
                            break;
                        }
                        else
                        {
                            readErrorsInARow++;
                            readBlockSize = 4096;
                            if (readErrorsInARow < 5)
                            {
                                bytesToSkipped = 4 * 1024;
                            }

                            else if (readErrorsInARow < 10)
                            {
                                bytesToSkipped = 20 * 1024;
                            }

                            else if (readErrorsInARow < 15)
                            {
                                bytesToSkipped = 100 * 1024;
                            }

                            else if (readErrorsInARow < 20)
                            {
                                bytesToSkipped = 1024 * 1024;
                            }

                            else
                            {
                                bytesToSkipped = 10 * 1024 * 1024;
                            }
                        }
                        nextReadOffset += bytesToSkipped;
                    }


                    if (!eof)
                    {
                        try { destFile.Write(buff, 0, bytesRead); }
                        catch (Exception e)
                        {
                            downLoadingTerminate = true;
                            MessageBox.Show(e.ToString(), "Error saving Sipper File[" + fcs.FileName + "]", MessageBoxButtons.OK);
                            break;
                        }

                        fcs.AddToCopied(bytesRead);
                        fcs.AddToSkipped(bytesToSkipped);
                        bytesCopied += bytesRead;
                    }
                }

                s.Close();
                s.Dispose();
                s = null;

                destFile.Close();
                destFile.Dispose();
                destFile = null;

                if (fcs.Copied >= fcs.Size)
                {
                    fcb.DownLoaded = true;
                }

                if (downLoadingTerminate)
                {
                    break;
                }

                filesCopied++;
            }

            downLoadingRunning = false;
            closeForm          = true;
        } /* CopyFileList */