如何将二进制转换为字节并在c#中写入文件
本文关键字:文件 字节 二进制 转换 | 更新日期: 2023-09-27 17:53:59
我正在尝试使用c#从数据库读取二进制文件并将其作为文件写入本地磁盘。
使用下面的代码…但是这一行有问题:byte[] fileAsByte = byte.Parse(row["Blob"]);
public static void ReadBlob()
{
int icount = 0;
string FileName;
SqlConnection Mycon = new SqlConnection(Con);
Mycon.Open();
string queryString = "select * from " + TblName;
SqlDataAdapter adapter = new SqlDataAdapter(queryString, Mycon);
DataTable dtBlob = new DataTable();
adapter.Fill(dtBlob);
foreach (DataRow row in dtBlob.Rows)
{
byte[] fileAsByte = byte.Parse(row["Blob"]);
FileName = FilePath + TblName + row["BlobId"].ToString() + FileType;
WriteBlob(fileAsByte, FileName);
}
Mycon.Close();
}
public static void WriteBlob(byte[] buff, string fileName)
{
try
{
FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(buff);
bw.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
byte.Parse
将尝试解析单个字节。你试过直接选角吗?
byte[] fileAsByte = (byte[]) row["Blob"];
如果失败,它至少应该显示出DataRow
中实际上是什么类型的。希望它是某种比较容易转换成byte[]
的类型。
如果列的类型是varbinary(max),则可以在SqlDataReader上使用GetSqlBytes或GetSqlBinary。如果列的类型是varchar(max)或nvarchar(max),则在SqlDataReader上使用GetSqlChars。你也可以使用GetBytes {this接受数组缓冲区的大小}或GetSqlBytes。
此外,如上所述,对于varbinary(MAX),下面的行也应该可以工作
byte[] binaryData = (byte[])row["Blob"];