前景提要
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(); } } C#、SQL 谢军 | 初学一级 | 园豆: 3
提问于:2019-03-26 14:14 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(3) 0 文件不需要放在数据库里,读写还慢,用ftp上传下载文件,可以的话自己写socket tcp连接做CS jqw2009 | 园豆:1946 (小虾三级) | 2019-03-26 15:01 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 兄弟,rar是二进制文件啊,你竟然想用文本编码去套路它。。。你直接获取filestream里面的二进制data就OK了的呀 新的开始 | 园豆:659 (小虾三级) | 2019-03-26 21:51 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 文件不应该存在数据库中,而是应该存放在一个文件夹中,数据库中存储对应的路径 又见阿郎 | 园豆:169 (初学一级) | 2019-05-04 17:15 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。