C#实现文件与字符串互转的方法详解
作者:Csharp 发布时间:2023-04-26 03:18:12
标签:C#,文件,字符串
嗯,就是BASE64,不用多想,本来计划是要跟上一篇字符串压缩一起写的,用来实现将一个文件可以用json或者text等方式进行接口之间的传输,为了保证传输效率,所以对生成的字符串进行进一步压缩。但是由于不能上传完整源代码,所以就还是分开写了,方便展示实现效果以及功能的单独使用。
实现功能
将文件与为字符串互转
开发环境
开发工具: Visual Studio 2013
.NET Framework版本:4.5
实现代码
//选择文件路径
private void btnPath_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
textBox1.Text = ofd.FileName;
}
}
//调用文件转base64
private void btnBase64_Click(object sender, EventArgs e)
{
textBox2.Text = FileToBase64String(textBox1.Text);
MessageBox.Show("成功");
}
//调用base64转文件
private void btnFile_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "文件|*" + textBox1.Text.Substring(textBox1.Text.LastIndexOf('.'));
if (sfd.ShowDialog() == DialogResult.OK)
{
Base64StringToFile(textBox2.Text, sfd.FileName);
MessageBox.Show("成功");
}
}
//文件转base64
public string FileToBase64String(string path)
{
try
{
string data = "";
using (MemoryStream msReader = new MemoryStream())
{
using (FileStream fs = new FileStream(path, FileMode.Open))
{
byte[] buffer = new byte[1024];
int readLen = 0;
while ((readLen = fs.Read(buffer, 0, buffer.Length)) > 0)
{
msReader.Write(buffer, 0, readLen);
}
}
data = Convert.ToBase64String(msReader.ToArray());
}
return data;
}
catch (Exception ex)
{
throw ex;
}
}
//base64转文件
public void Base64StringToFile(string base64String, string path)
{
try
{
using (MemoryStream stream = new MemoryStream(Convert.FromBase64String(base64String)))
{
using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
{
byte[] b = stream.ToArray();
fs.Write(b, 0, b.Length);
}
}
}
catch (Exception ex)
{
throw ex;
}
}
实现效果
观察代码可以发现,其实在上一篇做压缩的时候,也是用到了base64,所以如果是单纯的要操作文件的,只需要对文件进行流操作即可。
来源:https://blog.csdn.net/qq_27410185/article/details/122879546


猜你喜欢
- C#中属性的目的是对字段的封装,是为了程序数据的安全性考虑的。本文即以实例形式对C#中只读只写属性进行剖析。对于只读或只写的属性定义:1、不
- 相信对于手机的时间日期设置大家一定都不陌生吧,今天举一个关于时间日期设置的示例,其中有些许不完善之处,例如如何使设置的时间日期和手机系统同步
- 在实际项目中,Java有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell。先把C写出来的make成
- 一,栈1,概念在我们软件应用 ,栈这种后进先出数据结构的应用是非常普遍的。比如你用浏 览器上网时不管什么浏览器都有 个"后退&qu
- 前言Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util
- 开场白我本来是一名android开发者,突然就对java后端产生了浓烈的兴趣。所以,立马就转到了后端。第一个项目使用的使用Spring Da
- 数据加解密的实现方式多种多样,在mybatis环境中数据加解密变得非常简单易用,本文旨在提供参考,在生产中应尽可能完成单元测试,开展足够的覆
- 目录一,功能二,工具三、效果图:四、数据库设计五、JAVA层次分析六、主要Java代码分析一,功能管理员登录图书借阅信息管理图书信息管理管理
- 1、图的定义我们知道,前面讨论的数据结构都有一个框架,而这个框架是由相应的算法实现的,比如二叉树搜索树,左子树上所有结点的值均小于它的根结点
- MyBatis的注解实现复杂映射开发实现复杂关系映射之前我们可以在映射文件中通过配置来实现,使用注解开发后,我们可以使用@Results注解
- 1.Object类是什么?🟪Object 是 Java 类库中的一个特殊类,也是所有类的父类。也就是说,Java 允许把任何类型的
- 本文实例讲述了Android编程自定义AlertDialog样式的方法。分享给大家供大家参考,具体如下:开发的时候,通常我们要自定义Aler
- 本文实例讲述了Android编程使用Service实现Notification定时发送功能。分享给大家供大家参考,具体如下:/** * 通过
- 本文实例讲述了WinForm实现移除控件某个事件的方法,供大家参考借鉴一下。具体功能代码如下:主要功能部分代码如下:/// <summ
- spring boot 使用profile来分区配置很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时
- 数组与链表的比较:数组通过下标访问的话是O(1)数组一旦声明 长度就是固定的数组的数据是物理逻辑均连续的链表增删要快一些, 数组遍历快一些长
- 1、private实现封装处理如果像想要知道封装,首先必须清楚如果没有封装会怎么样?没有封装方法中的属性,在所有方法被调用后都可以进行无权限
- jar包就指第三方提供的开源的API,这些API不属于JDK的,需要通过导入才能使用。添加和导入的区别注意:本文里的 导入 和 添加 jar
- 本文实例讲述了Java基于栈方式解决汉诺塔问题。分享给大家供大家参考,具体如下:/** * 栈方式非递归汉诺塔 * @author zy *
- 问题情况:在使用 @TableId(type = IdType.AUTO)之后添加的id数字特别大原因:因为在第一次使用的时候没有加注解 所