首页 新闻 会员 周边

C# 使用sql的image类型字段保存rar文件的问题。

0
悬赏园豆:50 [待解决问题]

1.将要更新的程序打包成rar文件,如:test.rar。(手动使用winrar程序可以正常的解压)。

2.将test.rar,以二进方式读取
代码:
//读取rar文件内容
FileStream fs = new FileStream(rarFilePath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs,Enconding.UTF-8);
Data = br.ReadBytes((int)fs.Length);
说明:
当时怀疑是读取的字符编码问题,于是尝试了UTF-8,UTF-32,ASCII,Unicode 都不能解决问题。

3.将test.rar文件的内容,插入数据表的Data字段(image类型)

4.从数据表的Data字段中读取test.rar文件的内容,保存到指定目录,文件名:test.rar(手动打开提示:the file "???" header is corrupt,中文:文件头已经损坏。)

5.使用自定义的WinRarHelper类中的方法,解压test.rar文件,test.rar文件没有解压,也不提示异常。
/// <summary>
/// 解压.rar
/// </summary>
/// <param name="inputRarFileName">输入.rar</param>
/// <param name="outputPath">输出目录</param>
public static void UnCompressRar(string inputRarFileName, string outputPath, Action<ExceptionInfo> writeLog, out string msg)
{
//rar 执行时的命令、参数
string rarCmd;
//启动进程的参数
System.Diagnostics.ProcessStartInfo processStartInfo = new System.Diagnostics.ProcessStartInfo();
//进程对象
System.Diagnostics.Process process = new System.Diagnostics.Process();

        msg = "";

        try
        {
            if (!ExistSetupWinRar)
            {
                throw new ArgumentException("请确认服务器上已安装WinRar应用!");
            }
            //如果压缩到目标路径不存在
            if (!System.IO.Directory.Exists(outputPath))
            {
                //创建压缩到目标路径
                System.IO.Directory.CreateDirectory(outputPath);
            }
            rarCmd = "x " + inputRarFileName + " " + outputPath + " -y";


            processStartInfo.FileName = WinRarPath;
            processStartInfo.Arguments = rarCmd;
            processStartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            processStartInfo.WorkingDirectory = outputPath;


            process.StartInfo = processStartInfo;
            process.Start();
            process.WaitForExit();
            process.Close();
            process.Dispose();

            msg = "解压成功!";
        }
        catch (Exception ex)
        {
            writeLog.Invoke(new ExceptionInfo() { Type = "WinRarHelper.UnCompressRar", Message = ex.Message, Detail = ex.StackTrace });

            msg = "解压失败!";
        }
        finally
        {
            process.Close();
            process.Dispose();
        }
    }
谢军的主页 谢军 | 初学一级 | 园豆:3
提问于:2019-03-26 14:14
< >
分享
所有回答(3)
0

文件不需要放在数据库里,读写还慢,用ftp上传下载文件,可以的话自己写socket tcp连接做CS

jqw2009 | 园豆:2439 (老鸟四级) | 2019-03-26 15:01
0

兄弟,rar是二进制文件啊,你竟然想用文本编码去套路它。。。你直接获取filestream里面的二进制data就OK了的呀

新的开始 | 园豆:679 (小虾三级) | 2019-03-26 21:51
0

文件不应该存在数据库中,而是应该存放在一个文件夹中,数据库中存储对应的路径

又见阿郎 | 园豆:163 (初学一级) | 2019-05-04 17:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册