[英]Save binary file to DB
我知道关于这个主题有很多线程,我试图从VB实现(转换) 这个到C#。
Table fileContainer = {string FileName, binary File}
这是我的尝试:
partial void FileContainersAddAndEditNew_Execute()
{
Dispatchers.Main.BeginInvoke(() =>
{
OpenFileDialog openDialog = new OpenFileDialog();
if (openDialog.ShowDialog() == true)
{
using (System.IO.FileStream fileData = openDialog.File.OpenRead())
{
long fileLen = fileData.Length;
if (fileLen > 0)
{
Byte[] fileBArray = new Byte[fileLen];
fileData.Read(fileBArray, 0, fileLen);
fileData.Close();
FileContainer fc = this.FileContainers.AddNew();
fc.File = fileBArray;
fc.FileName = openDialog.File.Extension.ToString().ToLower();
}
}
}
});
}
但是这行代码失败了:
FileContainer fc = this.FileContainers.AddNew();
出现此错误:
IVisualCollection<T>.AddNew() should not be called from UI Thread.
我有点困惑。 我想:
Dispatchers.Main.BeginInvoke(() =>
防止这种情况发生。 或者我做错了吗?
我注意到的另一件事是VB代码使用:
filenLen-1
但我试图这样做是出界的。 他们也没有将它转换为int
但.Read
不需要花费很long
作为参数。
openFileDialog.ShowDialog()
不返回bool值,也不能在if语句中使用。 openFileDialog.ShowDialog()
将打开该对话框。 据我所知,执行暂停,直到您关闭对话框并且没有理由检查它是否打开。
filenLen-1
using (System.IO.FileStream fileData = openDialog.File.OpenRead());
long fileLen = fileData.Length;
应该
filenLen--;
using (System.IO.FileStream fileData = System.IO.File.OpenRead(openDialog.FileName))
int fileLen = int.Parse(fileData.Length.ToString());
fileData.Read(fileBArray, 0, fileLen);
需要fileLen是一个整数。 尽管fileData返回long,但这可能会导致问题。
至于调用问题,我必须确切知道你想要做些什么来帮助你。 也许我们可以避免调用。
我在这里发布我更新的代码,以免为未来的读者弄乱我的原始代码。 这应该工作;
partial void FileContainersAddAndEditNew_Execute()
{
var supportedFiles = "*.*";
Dispatchers.Main.BeginInvoke(() =>
{
OpenFileDialog openDialog = new OpenFileDialog();
openDialog.Filter = "Supported files|" + supportedFiles;
if (openDialog.ShowDialog() == true)
{
using (System.IO.FileStream fileData = openDialog.File.OpenRead())
{
long fileLen = fileData.Length;
if (fileLen > 0)
{
Byte[] fileBArray = new Byte[fileLen--];
fileData.Read(fileBArray, 0, (int)fileLen);
fileData.Close();
var filename = openDialog.File.ToString().ToLower();
this.FileContainers.Details.Dispatcher.BeginInvoke(() =>
{
FileContainer fc = this.FileContainers.AddNew();
fc.File = fileBArray;
fc.FileName = filename;
});
}
}
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.