类别:程序开发
日期:2022-05-06 浏览:2081 评论:0
原文链接:https://blog.csdn.net/liubowei_0312/article/details/53378146
C#将文件转成16进制码流写入数据库存起来,访问的时候再还原成PDF文件。
适合将文件写入数据库,远程访问的时候还原
1.首先把文件转成十六进制文件流 ======================= public void FileToStream() { try { IPdfClassBll pdfClassBll = DataFactory.GetPdfClass(); FileStream fs = new FileStream(@"文件路径/***.PDF", FileMode.Open); BinaryReader br = new BinaryReader(fs); Byte[] byData = br.ReadBytes((int)fs.Length); StringBuilder strResult = new StringBuilder(byData.Length * 8); string binary = byteToHexStr(byData); PdfInfo pdfinfo = new PdfInfo(); pdfinfo.PRTNUM = "PH001";//创建的新文件名 pdfinfo.PDFREPORT = binary; pdfClassBll.Add(pdfinfo); fs.Close(); br.Close(); } catch (Exception ex) { MessageBox.Show("文件写入失败~!"); } } /// <summary> /// 字节数组转16进制字符串 /// </summary> /// <param name="bytes"></param> /// <returns></returns> public static string byteToHexStr(byte[] bytes) { string returnStr = ""; if (bytes != null) { for (int i = 0; i < bytes.Length; i++) { returnStr += bytes[i].ToString("X2"); } } return returnStr; } /// <summary>
2.读取数据库中的 PDF流 信息,并写入文件 ======================= public void StreamToFile(string prtnum) { try { //写入位置 SampleConfig config = MonitorConfigManager.GetInstance().GetSampleConfig(); string reportPath = config.ReportPath; reportPath = reportPath + "\\" + oSampleInfo.PRTNUM + ".pdf"; IPdfClassBll pdfClassBll = DataFactory.GetPdfClass(); PdfInfo pdfInfo = pdfClassBll.GetPdfReportByPRTNUM(prtnum); string strPdf = pdfInfo.PDFREPORT; byte[] bytes = strToToHexByte(strPdf); FileStream fileStream = new FileStream(reportPath, FileMode.OpenOrCreate, FileAccess.Write); fileStream.Write(bytes, 0, bytes.Length); BinaryWriter binaryWriter = new BinaryWriter(fileStream); binaryWriter.Write(bytes); binaryWriter.Close(); fileStream.Close(); } catch (Exception ex) { } } /// <summary> /// 16进制字符串转为文字 /// </summary> /// <param name="hexString"></param> /// <returns></returns> private static byte[] strToToHexByte(string hexString) { hexString = hexString.Replace(" ", ""); if ((hexString.Length % 2) != 0) hexString += " "; byte[] returnBytes = new byte[hexString.Length / 2]; for (int i = 0; i < returnBytes.Length; i++) returnBytes[i] = Convert.ToByte(hexStringSubstring(i * 2, 2), 16); return returnBytes; }
发表评论 / 取消回复