从 OpenFileDialog 处理多个选定的文件
Process multiple selected files from OpenFileDialog
我使用 foreach 循环读取多个图像文件,但我只能流式传输第一个选择的 file.When 我尝试保存多个不同的图像,输出就像第一个选择的图像的精确副本,而不是保持不同图片。
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(DBHandler.GetConnectionString());
try
{
OpenFileDialog fop = new OpenFileDialog();
fop.Multiselect = true;
fop.InitialDirectory = "C:\";
fop.Filter = "JPG,JPEG|*.jpg|PNG|*png";
if (fop.ShowDialog() == DialogResult.OK)
{
foreach (String files in fop.FileNames)
{
FileStream FS = new FileStream(@fop.FileName, FileMode.Open, FileAccess.Read);
byte[] img = new byte[FS.Length];
FS.Read(img, 0, Convert.ToInt32(FS.Length));
if (con.State == ConnectionState.Closed)
con.Open();
SqlCommand cmd = new SqlCommand("SaveImage", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@img", SqlDbType.Image).Value = img;
cmd.ExecuteNonQuery();
}
MessageBox.Show("Image has been saved successfully!!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
我想在同一张表格上查看所有图片。
我的期望:A-B-C-D (每个字母代表不同的检索图像。"A"是从对话框中选择的第一个文件)
实际输出:A-A-A-A。为什么会这样?
在您的循环中,您正在使用 fop.FileName
,其中 returns 第一个选择的文件:
This property can only be the name of one selected file. If you want to return an array containing the names of all selected files in a multiple-selection dialog box, use FileNames.
foreach (String files in fop.FileNames)
{
FileStream FS = new FileStream(@fop.FileName, FileMode.Open, FileAccess.Read);
// ...
}
改为使用迭代变量 filename
:
foreach (String filename in fop.FileNames)
{
FileStream FS = new FileStream(filename, FileMode.Open, FileAccess.Read);
// ...
}
相关:.
你的代码应该是这样的
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(DBHandler.GetConnectionString());
try
{
OpenFileDialog fop = new OpenFileDialog();
fop.Multiselect = true;
fop.InitialDirectory = @"C:\";
fop.Filter = "JPG,JPEG|*.jpg|PNG|*png";
if (fop.ShowDialog() == DialogResult.OK)
{
foreach (String files in fop.FileNames)
{
FileStream FS = new FileStream(@files, FileMode.Open, FileAccess.Read);
byte[] img = new byte[FS.Length];
FS.Read(img, 0, Convert.ToInt32(FS.Length));
if (con.State == ConnectionState.Closed)
con.Open();
SqlCommand cmd = new SqlCommand("SaveImage", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@img", SqlDbType.Image).Value = img;
cmd.ExecuteNonQuery();
}
MessageBox.Show("Image has been saved successfully!!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
我使用 foreach 循环读取多个图像文件,但我只能流式传输第一个选择的 file.When 我尝试保存多个不同的图像,输出就像第一个选择的图像的精确副本,而不是保持不同图片。
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(DBHandler.GetConnectionString());
try
{
OpenFileDialog fop = new OpenFileDialog();
fop.Multiselect = true;
fop.InitialDirectory = "C:\";
fop.Filter = "JPG,JPEG|*.jpg|PNG|*png";
if (fop.ShowDialog() == DialogResult.OK)
{
foreach (String files in fop.FileNames)
{
FileStream FS = new FileStream(@fop.FileName, FileMode.Open, FileAccess.Read);
byte[] img = new byte[FS.Length];
FS.Read(img, 0, Convert.ToInt32(FS.Length));
if (con.State == ConnectionState.Closed)
con.Open();
SqlCommand cmd = new SqlCommand("SaveImage", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@img", SqlDbType.Image).Value = img;
cmd.ExecuteNonQuery();
}
MessageBox.Show("Image has been saved successfully!!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
我想在同一张表格上查看所有图片。
我的期望:A-B-C-D (每个字母代表不同的检索图像。"A"是从对话框中选择的第一个文件)
实际输出:A-A-A-A。为什么会这样?
在您的循环中,您正在使用 fop.FileName
,其中 returns 第一个选择的文件:
This property can only be the name of one selected file. If you want to return an array containing the names of all selected files in a multiple-selection dialog box, use FileNames.
foreach (String files in fop.FileNames)
{
FileStream FS = new FileStream(@fop.FileName, FileMode.Open, FileAccess.Read);
// ...
}
改为使用迭代变量 filename
:
foreach (String filename in fop.FileNames)
{
FileStream FS = new FileStream(filename, FileMode.Open, FileAccess.Read);
// ...
}
相关:
你的代码应该是这样的
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(DBHandler.GetConnectionString());
try
{
OpenFileDialog fop = new OpenFileDialog();
fop.Multiselect = true;
fop.InitialDirectory = @"C:\";
fop.Filter = "JPG,JPEG|*.jpg|PNG|*png";
if (fop.ShowDialog() == DialogResult.OK)
{
foreach (String files in fop.FileNames)
{
FileStream FS = new FileStream(@files, FileMode.Open, FileAccess.Read);
byte[] img = new byte[FS.Length];
FS.Read(img, 0, Convert.ToInt32(FS.Length));
if (con.State == ConnectionState.Closed)
con.Open();
SqlCommand cmd = new SqlCommand("SaveImage", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@img", SqlDbType.Image).Value = img;
cmd.ExecuteNonQuery();
}
MessageBox.Show("Image has been saved successfully!!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
}