コード例 #1
0
ファイル: I3DataFile.cs プロジェクト: ie310mu/i3go_codemaker
        private void PutNextEntry(FileStream s, string fileID, string fileName, long fileLength)
        {
            IEFS_FileInfo fileInfo = new IEFS_FileInfo(fileName, fileID, fileLength);

            byte[] data = fileInfo.ToBytes();

            s.Seek(0, SeekOrigin.End);
            s.Write(data, 0, data.Length);
        }
コード例 #2
0
ファイル: I3DataFile.cs プロジェクト: ie310mu/i3go_codemaker
        //pos在数据文件中的起始位置(包含文件头信息)  len 文件头长度+文件长度
        private IEFS_FileInfo GetFileInfo(string searchFileID, out long pos)
        {
            FileStream dataFileStream = null;

            try
            {
                dataFileStream = new FileStream(_fileName, FileMode.Open, FileAccess.Read, FileShare.None);
                if (dataFileStream.Length == 0)
                {
                    pos = 0;
                    return(null);
                }

                long total = 0;
                while (true)
                {
                    IEFS_FileInfo fileInfo = new IEFS_FileInfo(dataFileStream, total);

                    if (fileInfo.fielID == searchFileID)
                    {
                        pos = total;
                        return(fileInfo);
                    }

                    total = total + fileInfo.BytesLength + fileInfo.fileLength;

                    if (total == dataFileStream.Length)
                    {
                        break;
                    }
                }

                pos = 0;
                return(null);
            }
            catch (Exception ex)
            {
                #region 出错处理
                MessageBox.Show(ex.Message);
                pos = 0;
                return(null);

                #endregion
            }
            finally
            {
                #region 释放
                if (dataFileStream != null)
                {
                    dataFileStream.Close();
                }
                #endregion
            }
        }
コード例 #3
0
ファイル: I3DataFile.cs プロジェクト: ie310mu/i3go_codemaker
        public bool DeleteFile(string deleteFileID)
        {
            #region 获取文件信息
            long          pos      = 0;
            IEFS_FileInfo fileInfo = GetFileInfo(deleteFileID, out pos);
            if (fileInfo == null)
            {
                return(false);
            }
            #endregion

            FileStream dataFileStream = null;
            FileStream destStream     = null;
            try
            {
                dataFileStream = new FileStream(_fileName, FileMode.Open, FileAccess.Read, FileShare.None);
                destStream     = new FileStream(_fileName + ".move", FileMode.Create, FileAccess.ReadWrite, FileShare.None);

                CopyDeleteStream(dataFileStream, destStream, pos, fileInfo.BytesLength + fileInfo.fileLength);

                return(true);
            }
            catch (Exception ex)
            {
                #region 出错处理
                MessageBox.Show(ex.Message);
                return(false);

                #endregion
            }
            finally
            {
                #region 释放
                if (destStream != null)
                {
                    destStream.Close();
                }
                if (dataFileStream != null)
                {
                    dataFileStream.Close();
                }
                #endregion

                #region  除与重命名文件
                File.Delete(_fileName);
                File.Move(_fileName + ".move", _fileName);
                #endregion
            }
        }
コード例 #4
0
ファイル: I3DataFile.cs プロジェクト: ie310mu/i3go_codemaker
        public DataTable ListFiles()
        {
            #region 生成DataTable与其架构
            DataTable dataTable = new DataTable();

            #region FileID
            DataColumn col1 = new DataColumn("FileID");
            col1.DataType  = typeof(string);
            col1.MaxLength = 50;
            dataTable.Columns.Add(col1);
            #endregion

            #region FileName
            DataColumn col2 = new DataColumn("FileName");
            col2.DataType  = typeof(string);
            col2.MaxLength = 255;
            dataTable.Columns.Add(col2);
            #endregion

            #region FileLength
            DataColumn col3 = new DataColumn("FileLength");
            col3.DataType = typeof(int);
            dataTable.Columns.Add(col3);
            #endregion

            #endregion

            FileStream dataFileStream = null;
            try
            {
                dataFileStream = new FileStream(_fileName, FileMode.Open, FileAccess.Read, FileShare.None);
                if (dataFileStream.Length == 0)
                {
                    return(null);
                }

                long total = 0;
                while (true)
                {
                    IEFS_FileInfo fileInfo = new IEFS_FileInfo(dataFileStream, total);
                    total = total + fileInfo.BytesLength + fileInfo.fileLength;

                    DataRow row = dataTable.NewRow();
                    row.BeginEdit();
                    row["FileID"]     = fileInfo.fielID;
                    row["FileName"]   = fileInfo.fileName;
                    row["FileLength"] = fileInfo.fileLength;
                    row.EndEdit();
                    dataTable.Rows.Add(row);

                    if (total == dataFileStream.Length)
                    {
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                #region 出错处理
                MessageBox.Show(ex.Message);
                return(null);

                #endregion
            }
            finally
            {
                #region 释放
                if (dataFileStream != null)
                {
                    dataFileStream.Close();
                }
                #endregion
            }

            return(dataTable);
        }
コード例 #5
0
ファイル: I3DataFile.cs プロジェクト: ie310mu/i3go_codemaker
        public bool GetFile(string destFileName, string fileID)
        {
            #region 获取文件信息
            long          pos      = 0;
            IEFS_FileInfo fileInfo = GetFileInfo(fileID, out pos);
            if (fileInfo == null)
            {
                return(false);
            }
            #endregion

            #region 得到临时文件名
            string tempPath = Application.StartupPath + @"\tempzip";
            CheckTempPath(tempPath);
            string tempFileName = tempPath + @"\" + fileID + ".zip";
            #endregion

            #region 从数据文件中提取相应文件的压缩包
            FileStream dataFileStream = null;
            FileStream tempFileStream = null;
            try
            {
                dataFileStream = new FileStream(_fileName, FileMode.Open, FileAccess.Read, FileShare.None);
                tempFileStream = new FileStream(tempFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.None);
                byte[] buffer = new byte[4096];
                dataFileStream.Seek(pos + fileInfo.BytesLength, SeekOrigin.Begin);
                while (true)
                {
                    int size = dataFileStream.Read(buffer, 0, buffer.Length);
                    if (size <= 0)
                    {
                        break;
                    }
                    if (dataFileStream.Position > (pos + fileInfo.BytesLength + fileInfo.fileLength))
                    {
                        int xsize = size;
                        size -= Convert.ToInt32(dataFileStream.Position - pos - fileInfo.BytesLength - fileInfo.fileLength);
                        if (size == 0)
                        {
                            break;
                        }
                        buffer = new byte[size];
                        dataFileStream.Seek(dataFileStream.Position - xsize, SeekOrigin.Begin);
                        dataFileStream.Read(buffer, 0, buffer.Length);
                        tempFileStream.Write(buffer, 0, buffer.Length);
                        break;
                    }
                    else
                    {
                        tempFileStream.Write(buffer, 0, buffer.Length);
                    }
                }
            }
            catch (Exception ex)
            {
                #region 出错处理
                MessageBox.Show(ex.Message);
                return(false);

                #endregion
            }
            finally
            {
                #region 释放
                if (dataFileStream != null)
                {
                    dataFileStream.Close();
                }
                if (tempFileStream != null)
                {
                    tempFileStream.Close();
                }
                #endregion
            }
            #endregion

            #region 从压缩包中解压文件
            I3SharpZip.UpZipFileByIndex(tempFileName, destFileName, 4096, 1);
            return(true);

            #endregion
        }