Exemple #1
0
        public static void CheckMainFile()
        {
            if (File.Exists(txtFileName.Text))
            {
                lnkFileName.Text = Path.GetFileName(txtFileName.Text);

                if (IoTools.FileOpened(txtFileName.Text))
                {
                    InvalidFile    = true;
                    lFileSize.Text = "File Size: Access Denied.";
                    return;
                }

                lFileSize.Text      = "File Size: " + IoTools.ParseFileSize(txtFileName.Text);
                lnkFileName.Enabled = true;
                InvalidFile         = false;
            }
            else
            {
                InvalidFile = true;
                if (txtFileName.Text.Length > 0)
                {
                    lnkFileName.Text = "File does not exists.";
                }
                else
                {
                    lnkFileName.Text = "No files selected.";
                }

                lnkFileName.Enabled = false;
                lFileSize.Text      = "File Size: N/A";
            }

            UpdatePartsInfo();
        }
        //0- Original File Name
        //1- Original File Size
        //2- First Part Name
        //3- Parts Number
        //4- {
        //   P% Name
        //   P% Size
        //   }
        private void GenerateSfx()
        {
            if (!includeSfx)
            {
                return;
            }

            Header hdr = new Header();

            //Self Joiner Signature
            hdr.Add(Path.GetFileName(fileName));
            hdr.Add(fileSize.ToString());
            hdr.Add(Path.GetFileName(files[0]));
            hdr.Add(files.Count.ToString());

            for (int i = 0; i < files.Count; i++)
            {
                hdr.Add(Path.GetFileName(files[i]));
                hdr.Add(pSizes[i].ToString());
            }

            if (Sfx.OutPath.Length > 0)
            {
                hdr.Add(Sfx.OutPath);
            }
            else
            {
                hdr.Add("\0");
            }

            if (Sfx.Comment.Length > 0)
            {
                hdr.Add(Sfx.Comment);
            }
            else
            {
                hdr.Add("\0");
            }

            string sfxPath = Path.Combine(outputFolder, "Q Join.exe");

            File.Copy(Path.Combine(Application.StartupPath, "qj.bin"), sfxPath, true);
            long sfxSize = IoTools.GetFileSize(sfxPath);

            FileStream   fs = new FileStream(sfxPath, FileMode.Append);
            BinaryWriter br = new BinaryWriter(fs);

            br.Seek(0, SeekOrigin.End);
            hdr.Write(br);

            fs.Close();
            br.Close();

            fs.Dispose();
        }
        private void GetSplitterInfo()
        {
            info.FileSize = IoTools.GetFileSize(fileName);

            if (segmentSize == 0)
            {
                return;
            }

            info.SegmentSize = segmentSize;
            info.Segments    = (int)(info.FileSize / segmentSize + 0.5f);

            UpdateSegments();
        }
Exemple #4
0
        public static bool CheckSplitter(FrmBase frm)
        {
            //Check if the file existed
            if (!File.Exists(txtFileName.Text))
            {
                string msg = "Invalid source file.";
                if (txtFileName.Text.Length > 0)
                {
                    msg = "The file :" + "\n\'" + txtFileName.Text + "\' " + "does not exists.";
                }

                frm.ShowMessage(msg, MsgType.Error);
                return(false);
            }
            else
            {
                if (IoTools.FileOpened(txtFileName.Text))
                {
                    frm.ShowMessage("Source file Access Denied, file is being used by another process.", MsgType.Error);
                    return(false);
                }
            }

            if (GetPartSize() <= 0)
            {
                frm.ShowMessage("Invalid part size.", MsgType.Error);
                return(false);
            }

            if (!Directory.Exists(txtFolderName.Text))
            {
                string msg = "Invalid destination folder name.";
                if (txtFolderName.Text.Length > 0)
                {
                    msg = "Destination folder:" + "\n\'" + txtFolderName.Text + "\' " + "does not exists.";
                }

                frm.ShowMessage(msg, MsgType.Error);
                return(false);
            }

            return(true);
        }
        private void BtnOk_Click(object sender, EventArgs e)
        {
            bool   error;
            string pName   = TxtProfile.Text;
            long   pSize   = 0;
            double dblSize = 0;

            double.TryParse(TxtSize.Text, out dblSize);
            pSize = (long)(dblSize * Math.Pow(1024, CmbUnit.SelectedIndex));

            if (pSize > (long)Math.Pow(1024, 5))
            {
                MessageBox.Show("Invalid size, Part size is too large.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            error = CheckErrors();

            if (!error)
            {
                if (!editMode)
                {
                    if (Ini.KeyExists("profiles", pName))
                    {
                        MessageBox.Show("Profile name '" + pName + "' is already existed.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }

                    Ini.WriteValue("profiles", pName, IoTools.ParseSize(pSize));
                }

                Ini.WriteValue(pName, "name", TxtProfile.Text);
                Ini.WriteValue(pName, "size", pSize.ToString());
                Ini.WriteValue(pName, "index", CmbUnit.SelectedIndex);
                Ini.WriteValue(pName, "description", TxtDesc.Text);

                this.Close();
            }
        }
Exemple #6
0
        public static void UpdatePartsInfo()
        {
            long pSize = 0;

            if (File.Exists(txtFileName.Text))
            {
                pSize                = GetPartSize();
                Splitter.FileName    = txtFileName.Text;
                Splitter.SegmentSize = pSize;

                if (pSize > 0)
                {
                    lPartsNumber.Text = "Parts Number: " + Splitter.Info.Segments.ToString();
                    lPartSize.Text    = "Part Size: " + IoTools.ParseSize(Splitter.SegmentSize);
                }
            }
            else
            {
                lPartsNumber.Text = "Parts Number: N/A";
                lPartSize.Text    = "Part Size: N/A";
            }
        }
Exemple #7
0
        public static void CheckMainFile()
        {
            if (File.Exists(txtFileName.Text))
            {
                int pNumber = 0;

                lFileName.Text = "Part Name: " + IoTools.GetFileShortName(Path.GetFileName(txtFileName.Text), 50);

                lFileSize.Text = "Part Size: " + IoTools.ParseFileSize(txtFileName.Text);

                pNumber = GetPartsNumber();

                if (pNumber > 0)
                {
                    lPartsNumber.Text = "Parts Number: " + pNumber.ToString();
                }
                else
                {
                    lPartsNumber.Text = "Parts Number: Some parts are missing";
                }

                InvalidFile = false;
            }
            else
            {
                InvalidFile = true;
                if (txtFileName.Text.Length > 0)
                {
                    lFileName.Text = "Part Name: File does not exists.";
                }
                else
                {
                    lFileName.Text = "Part Name: No files selected.";
                }

                lFileSize.Text    = "Part Size: N/A";
                lPartsNumber.Text = "Parts Number: N/A";
            }

            string fileName = GetFirstPart();

            if (fileName == null)
            {
                SetCrcChk(false);
                return;
            }

            string pDir  = Directory.GetParent(txtFileName.Text).FullName;
            string fPath = Path.Combine(pDir, fileName);

            //Check if sfv file exists
            if (File.Exists(fPath + ".sfv"))
            {
                sfvFile = fPath + ".sfv";
                SetCrcChk(true);
            }
            else
            {
                SetCrcChk(false);
            }
        }
Exemple #8
0
        public static bool LoadParts(FrmBase frm)
        {
            string fileName = GetFirstPart();

            if (fileName == null)
            {
                frm.ShowMessage("Invalid source file name, Can not find first part.", MsgType.Error);
                return(false);
            }

            string pDir = Directory.GetParent(txtFileName.Text).FullName;

            OutFileName = Path.Combine(pDir, fileName);

            string fName = fileName + ".1.qsx"; //First part
            string fPath = Path.Combine(pDir, fName);

            partSize = IoTools.GetFileSize(fPath);

            if (partSize == 0)
            {
                frm.ShowMessage("File Access Denied, file is being used by another process.", MsgType.Error);
                return(false);
            }

            Header hdr = new Header();

            if (!File.Exists(fPath))
            {
                frm.ShowMessage("Source file: '" + fPath + "' does not exists.", MsgType.Error);
                return(false);
            }

            if (IoTools.FileOpened(fPath))
            {
                frm.ShowMessage("File Access Denied, file is being used by another process.", MsgType.Error);
                return(false);
            }

            if (hdr.ReadHeader(fPath))
            {
                int      pNum  = int.Parse(hdr.HeaderBlock.Rows[0]); //Parts number
                string[] files = new string[pNum];
                for (int i = 0; i < pNum; i++)
                {
                    string cFile = Path.Combine(pDir, hdr.HeaderBlock.Rows[i + 1]);
                    if (File.Exists(cFile))
                    {
                        files[i] = cFile;
                    }
                    else
                    {
                        //File 'cFile' Does not exists
                        frm.ShowMessage("Source file: '" + cFile + "' is missing.", MsgType.Error);
                        return(false);
                    }
                }

                Joiner.FileNames = files;

                if (hdr.HeaderBlock.Rows.Count > pNum + 1)
                {
                    Joiner.OutputSize = long.Parse(hdr.HeaderBlock.Rows[pNum + 1]);
                }
            }
            else
            {
                frm.ShowMessage("'" + fPath + "' is not a valid source file.", MsgType.Error);
                return(false);
            }

            return(true);
        }
Exemple #9
0
 /// <summary>
 /// Return size as string
 /// </summary>
 /// <returns></returns>
 public string GetSize()
 {
     return(IoTools.ParseSize(size));
 }
        private void SpltProcess()
        {
            //io main objects
            FileStream   fsReader = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            BinaryReader bReader  = new BinaryReader(fsReader);
            FileStream   fsWriter = null;
            BinaryWriter bWriter  = null;

            iBreak = false;
            Header hdr = new Header();

            int    count   = 0;
            long   bSize   = 0;
            string fileStr = "";

            files.Clear();
            long realSegmentSize;
            long segSize = 0;

            byte[]   buffer = new byte[bufferSize];
            GCHandle gc     = GCHandle.Alloc(buffer, GCHandleType.Pinned);

            fileSize = fsReader.Length;

            if (segmentSize >= fileSize)
            {
                realSegmentSize = fileSize;
            }
            else
            {
                realSegmentSize = segmentSize;
            }

            InitValues();

            bool fBPass = false; //first buffer pass
            long hLen   = 0;     //Header block length

            hdr.Add(info.Segments.ToString());
            for (int i = 0; i < info.Segments; i++)
            {
                hdr.Add(GetFileName(i + 1));
            }

            hdr.Add(fileSize.ToString());

            hLen = hdr.Length;

            try
            {
                while (fsReader.Position != fileSize)
                {
                    if (iBreak)
                    {
                        break;
                    }

                    subProgress = 0;
                    currentFile = GetFileName(count + 1);
                    currentPart = count + 1;
                    fileStr     = IoTools.FormatPath(outputFolder) + currentFile;
                    files.Add(fileStr);

                    fsWriter = new FileStream(fileStr, FileMode.Create);
                    bWriter  = new BinaryWriter(fsWriter);


                    if (currentPart == 1)
                    {
                        hdr.Write(bWriter);
                        segSize = hLen;
                    }
                    else
                    {
                        segSize = 0;
                    }

                    //Just for the last part for accuracy
                    if (fileSize - fsReader.Position < segmentSize)
                    {
                        realSegmentSize = fileSize - fsReader.Position;
                    }

                    while (fsWriter.Position < segmentSize && fsReader.Position != fsReader.Length)
                    {
                        pauseEvent.WaitOne(Timeout.Infinite, false);

                        if (stopEvent.WaitOne(0, true))
                        {
                            iBreak = true;
                            break;
                        }

                        if (bufferSize > segmentSize)
                        {
                            if (fsReader.Length - fsReader.Position < segmentSize)
                            {
                                bSize = (int)(fsReader.Length - fsReader.Position);
                            }
                            else
                            {
                                bSize = segmentSize;
                            }
                        }
                        else
                        {
                            if (fsReader.Length - fsReader.Position < bufferSize)
                            {
                                if (fsReader.Length - fsReader.Position < segmentSize - fsWriter.Position)
                                {
                                    bSize = (int)(fsReader.Length - fsReader.Position);
                                }
                                else
                                {
                                    bSize = segmentSize - fsWriter.Position;
                                }
                            }
                            else
                            {
                                if (fsWriter.Position + bufferSize < segmentSize)
                                {
                                    bSize = bufferSize;
                                }
                                else
                                {
                                    bSize = segmentSize - ((int)fsWriter.Position);
                                }
                            }
                        }

                        if (currentPart == 1 && !fBPass)
                        {
                            if (bSize > hLen)
                            {
                                bSize -= hLen;
                            }

                            fBPass = true;
                        }

                        bReader.Read(buffer, 0, (int)bSize);
                        bWriter.Write(buffer, 0, (int)bSize);

                        subProgress = GetPecent(fsWriter.Position, realSegmentSize);
                        progress    = GetPecent(fsReader.Position, fileSize);

                        segSize += bSize;
                    }

                    pSizes.Add(segSize);
                    subProgress = 100;

                    fsWriter.Close();
                    bWriter.Close();

                    count++;
                }

                subProgress = 0;
                progress    = 0;

                buffer = null;
                gc.Free();
                GC.Collect();

                fsReader.Close();
                bReader.Close();

                GenerateSfx();

                isRunning = false;
            }
            catch (IOException ex)
            {
                buffer = null;
                //gc.Free();
                GC.Collect();

                if (fsWriter != null)
                {
                    fsWriter.Close();
                    fsWriter.Dispose();
                }

                if (bWriter != null)
                {
                    bWriter.Close();
                }

                if (fsReader != null)
                {
                    fsReader.Close();
                    fsReader.Dispose();
                }

                if (bReader != null)
                {
                    bReader.Close();
                }

                splitMessage = ex.Message;

                isRunning = false;
            }
        }