示例#1
0
        /// <summary>
        /// 从数据库字段中读取文件并保存到目的文件,
        /// 注意,此字段必须是由WriteFileToDataRow写入!
        /// </summary>
        /// <param name="row"></param>
        /// <param name="fieldName"></param>
        /// <param name="destFileName"></param>
        /// <returns></returns>
        public static I3MsgInfo ReadFileFromDataRowBeforeRar(DataRow row, string fieldName, string destFileName)
        {
            #region 初始化临时文件
            string tmpDir         = I3DirectoryUtil.GetAppTmpDir();
            string tmpRarFileName = Path.Combine(tmpDir, I3DateTimeUtil.ConvertDateTimeToLongString(DateTime.Now) + ".rar");

            I3MsgInfo msg = I3DirectoryUtil.CreateDirctory(tmpDir);
            if (!msg.State)
            {
                return(msg);
            }
            if (!I3FileUtil.CheckFileNotExists(tmpRarFileName))
            {
                return(new I3MsgInfo(false, ""));
            }
            #endregion

            try
            {
                #region 从数据库读取文件到临时文件
                try
                {
                    byte[] buffer = (byte[])row[fieldName];
                    if (buffer.Length == 0)
                    {
                        return(new I3MsgInfo(false, "数据字段长度为0!"));
                    }

                    using (FileStream stream = new FileStream(tmpRarFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
                    {
                        stream.Write(buffer, 0, buffer.Length);

                        stream.Flush();
                        stream.Close();
                    }
                }
                catch (Exception ex)
                {
                    return(new I3MsgInfo(false, ex.Message, ex));
                }
                #endregion

                #region 解压
                using (I3Rar rar = new I3Rar())
                {
                    msg = rar.UnCompressASingleFile(tmpRarFileName, "IEFS_Rar.tmp", destFileName);
                    if (!msg.State)
                    {
                        return(msg);
                    }
                }
                #endregion

                return(I3MsgInfo.Default);
            }
            finally
            {
                #region  除临时Rar文件
                I3FileUtil.CheckFileNotExists(tmpRarFileName);
                #endregion
            }
        }
示例#2
0
        /// <summary>
        /// 将文件经过rar压缩后,写入数据库字段中
        /// 写入数据库中的实际是一个rar压缩文件,里面只有一个文件,文件名为 IEFS_Rar.tmp
        /// </summary>
        /// <param name="row"></param>
        /// <param name="fieldName"></param>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static I3MsgInfo WriteFileToDataRowAfterRar(DataRow row, string fieldName, string sourceFileName, bool deleteSource)
        {
            if (!File.Exists(sourceFileName))
            {
                return(new I3MsgInfo(false, "文件不存在!文件名:" + sourceFileName));
            }

            string tmpDir            = I3DirectoryUtil.GetAppTmpDir();
            string tmpRarFileName    = Path.Combine(tmpDir, I3DateTimeUtil.ConvertDateTimeToLongString(DateTime.Now) + ".rar");
            string tmpSourceFileName = Path.Combine(tmpDir, I3DateTimeUtil.ConvertDateTimeToLongString(DateTime.Now));

            tmpSourceFileName = Path.Combine(tmpSourceFileName, "IEFS_Rar.tmp");

            #region 生成临时目录并删除临时文件
            if (!I3FileUtil.CheckFileNotExists(tmpRarFileName))
            {
                return(new I3MsgInfo(false, "临时文件删除失败"));
            }
            I3MsgInfo msg = I3DirectoryUtil.CreateDirctory(tmpDir);
            if (!msg.State)
            {
                return(msg);
            }
            if (!I3FileUtil.CheckFileNotExists(tmpSourceFileName))
            {
                return(new I3MsgInfo(false, "临时源文件删除失败"));
            }
            msg = I3DirectoryUtil.CreateDirectoryByFileName(tmpSourceFileName);
            if (!msg.State)
            {
                return(msg);
            }
            msg = I3FileUtil.MoveFile(sourceFileName, tmpSourceFileName, deleteSource);
            if (!msg.State)
            {
                return(msg);
            }
            #endregion
            try
            {
                #region 压缩
                using (I3Rar rar = new I3Rar())
                {
                    msg = rar.CompressASingleFile(tmpSourceFileName, tmpRarFileName);
                    if (!msg.State)
                    {
                        return(msg);
                    }
                }
                if (!File.Exists(tmpRarFileName))
                {
                    return(new I3MsgInfo(false, "未知原因,压缩失败!文件名:" + tmpRarFileName));
                }
                #endregion

                #region 写入
                using (FileStream stream = File.OpenRead(tmpRarFileName))
                {
                    byte[] buffer = new byte[stream.Length];
                    stream.Position = 0;
                    int readSize = stream.Read(buffer, 0, buffer.Length);
                    if (readSize != buffer.Length)
                    {
                        return(new I3MsgInfo(false, "数据缓冲读取失败!目标长度:" + buffer.Length.ToString() + ",读取长度:" + readSize.ToString()));
                    }

                    try
                    {
                        row.BeginEdit();
                        row[fieldName] = buffer;
                        row.EndEdit();

                        stream.Close();
                        return(I3MsgInfo.Default);
                    }
                    catch (Exception ex)
                    {
                        return(new I3MsgInfo(false, ex.Message, ex));
                    }
                }
                #endregion
            }
            finally
            {
                #region  除临时文件
                I3FileUtil.CheckFileNotExists(tmpRarFileName);
                I3DirectoryUtil.DeleteDirctory(Path.GetDirectoryName(tmpSourceFileName));
                #endregion
            }
        }