Esempio n. 1
0
        /// <summary>
        /// 执行打开文件
        /// </summary>
        /// <param name="fileName"></param>
        private void _DoOpenFile(string fileName)
        {
            try
            {
                hexBox.stream = null;

                DynamicFileByteProvider dynamicFileByteProvider;
                try
                {
                    Encoding _encoding = this.hexBox._encoding;
                    if (this.hexBox.IsUseBase64)
                    {
                        this.hexBox.IsUseEncoding = true;
                        // 读成自己的解码后的流
                        try
                        {
                            FileStream inputStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);

                            byte[] data = new byte[4 * 1024]; //Chunk size is 4k
                            inputStream.Seek(0, SeekOrigin.Begin);
                            int read = inputStream.Read(data, 0, data.Length);

                            byte[]      chunk = new byte[4 * 1024];
                            List <byte> list  = new List <byte>();
                            while (read > 0)
                            {
                                chunk = Convert.FromBase64String(_encoding.GetString(data, 0, read));

                                list.AddRange(chunk);
                                read = inputStream.Read(data, 0, data.Length);
                            }

                            var decodeBytes = list.ToArray();

                            // 放入流中
                            Stream stream = new MemoryStream(decodeBytes);

                            inputStream.Close();
                            //dynamicFileByteProvider = new DynamicFileByteProvider(fileName);
                            dynamicFileByteProvider = new DynamicFileByteProvider(stream, _encoding);
                        }
                        catch (Exception ex)
                        {
                            var tmp = @"Base64编码无效";
                            this.hexBox._encoding = Encoding.UTF8;
                            byte[] bytes  = this.hexBox._encoding.GetBytes(tmp);
                            Stream stream = new MemoryStream(bytes);

                            // try to open in read-only mode
                            dynamicFileByteProvider = new DynamicFileByteProvider(stream);

                            this.hexBox.IsUseBase64 = false;
                        }
                    }
                    else
                    {
                        if (!System.Utility.Helper.File.IsValid(fileName))
                        {
                            byte[] data   = new byte[0];
                            Stream stream = new MemoryStream(data);
                            dynamicFileByteProvider = new DynamicFileByteProvider(stream);
                            hexBox.ByteProvider     = dynamicFileByteProvider;
                            _fileName = fileName;
                            this.fileSizeToolStripStatusLabel.Text = Util.GetDisplayBytes(this.hexBox.ByteProvider.Length);
                            return;
                        }
                        // try to open in write mode
                        dynamicFileByteProvider = new DynamicFileByteProvider(fileName, true,
                                                                              this.IsGoToGetDefaultCharset);
                    }
                }
                catch (IOException) // write mode failed
                {
                    try
                    {
                        if (!System.Utility.Helper.File.IsValid(fileName))
                        {
                            return;
                        }
                        // try to open in read-only mode
                        dynamicFileByteProvider = new DynamicFileByteProvider(fileName, true);
                    }
                    catch (IOException) // read-only also failed
                    {
                        // file cannot be opened
                        return;
                    }
                }
                if (!System.Utility.Helper.File.IsValid(fileName))
                {
                    return;
                }
                if (this.IsGoToGetDefaultCharset)
                {
                    hexBox._encoding        = dynamicFileByteProvider.GetEncoding();
                    IsGoToGetDefaultCharset = false;
                }
                hexBox.ByteProvider = dynamicFileByteProvider;
                _fileName           = fileName;
                this.fileSizeToolStripStatusLabel.Text = Util.GetDisplayBytes(this.hexBox.ByteProvider.Length);
            }
            catch
            {
                byte[] data   = new byte[0];
                Stream stream = new MemoryStream(data);
                var    dynamicFileByteProvider = new DynamicFileByteProvider(stream);
                hexBox.ByteProvider = dynamicFileByteProvider;
                _fileName           = fileName;
                this.fileSizeToolStripStatusLabel.Text = Util.GetDisplayBytes(this.hexBox.ByteProvider.Length);
                return;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 使用流打开文件
        /// </summary>
        /// <param name="stream">文件流</param>
        private void _DoOpenFile(Stream stream)
        {
            hexBox.fileName = null;
            DynamicFileByteProvider dynamicFileByteProvider;

            try
            {
                var bugFix = stream.ReadByte();
                stream.Position    = 0;
                this.hexBox.stream = stream;
                try
                {
                    try
                    {
                        Encoding _encoding = this.hexBox._encoding;
                        if (this.hexBox.IsUseBase64 && stream.Length < 1024 * 1024 * 10)
                        {
                            this.hexBox.IsUseEncoding = true;
                            // 读成自己的解码后的流
                            try
                            {
                                byte[] data = new byte[4 * 1024]; //Chunk size is 4k
                                stream.Seek(0, SeekOrigin.Begin);
                                int read = stream.Read(data, 0, data.Length);

                                byte[]      chunk = new byte[4 * 1024];
                                List <byte> list  = new List <byte>();
                                while (read > 0)
                                {
                                    chunk = Convert.FromBase64String(_encoding.GetString(data, 0, read));

                                    list.AddRange(chunk);
                                    read = stream.Read(data, 0, data.Length);
                                }

                                var decodeBytes = list.ToArray();

                                // 放入流中
                                Stream ms = new MemoryStream(decodeBytes);

                                stream.Close();
                                //dynamicFileByteProvider = new DynamicFileByteProvider(fileName);
                                dynamicFileByteProvider = new DynamicFileByteProvider(ms, _encoding);
                            }
                            catch (Exception ex)
                            {
                                var tmp = @"Base64编码无效";
                                this.hexBox._encoding = Encoding.UTF8;
                                byte[] bytes      = this.hexBox._encoding.GetBytes(tmp);
                                Stream tmp_stream = new MemoryStream(bytes);

                                // try to open in read-only mode
                                dynamicFileByteProvider = new DynamicFileByteProvider(tmp_stream);

                                this.hexBox.IsUseBase64 = false;
                            }
                        }
                        else
                        {
                            // try to open in write mode
                            dynamicFileByteProvider = new DynamicFileByteProvider(stream);
                        }
                    }
                    catch (IOException) // write mode failed
                    {
                        try
                        {
                            // try to open in read-only mode
                            dynamicFileByteProvider = new DynamicFileByteProvider(stream);
                        }
                        catch (IOException) // read-only also failed
                        {
                            // file cannot be opened
                            return;
                        }
                    }
                    if (this.IsGoToGetDefaultCharset)
                    {
                        hexBox._encoding        = dynamicFileByteProvider.GetEncoding();
                        IsGoToGetDefaultCharset = false;
                    }
                    hexBox.ByteProvider = dynamicFileByteProvider;
                    this.fileSizeToolStripStatusLabel.Text = Util.GetDisplayBytes(this.hexBox.ByteProvider.Length);
                }
                catch
                {
                }
            }
            catch (Exception ex)
            {
                byte[] data    = new byte[0];
                Stream stream1 = new MemoryStream(data);
                dynamicFileByteProvider = new DynamicFileByteProvider(stream1);
                hexBox.ByteProvider     = dynamicFileByteProvider;
                this.fileSizeToolStripStatusLabel.Text = Util.GetDisplayBytes(this.hexBox.ByteProvider.Length);
            }
        }