我搜索了整个访问被拒绝的问题,并且在我自己的系统上没有找到任何与访问Windows窗体相关的问题,所有问题都与网络应用程序有关。
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
byte[] imgdata;
FileStream fsrw;
string fname;
openFileDialog1.Filter = "Sai Files(*.JPG;*.GIF)|*.jpg;*.gif|All files (*.*)|*.*";
openFileDialog1.ShowDialog();//opens the dialog box
fname = openFileDialog1.FileName;//stores the file name in fname
pictureBox1.ImageLocation = fname;//gives the image location to picturebox
fsrw = new FileStream("C:\\Users\\Sainath\\Desktop", FileMode.Open, FileAccess.ReadWrite);
imgdata = new byte[fsrw.Length];
fsrw.Read(imgdata, 0, Convert.ToInt32(fsrw.Length));
fsrw.Close();
string s = "insert into imagetest values(@p1,@p2)";
SqlConnection con = new SqlConnection("server=.;Data Source=.;Initial Catalog=Work;Integrated Security=True");
SqlCommand cmd = new SqlCommand(s, con);
cmd.Parameters.AddWithValue("@p1", imgdata);
cmd.Parameters.AddWithValue("@p2", fname);
con.Open();
int i = cmd.ExecuteNonQuery();
con.Close();
Console.WriteLine(i);
}
}
答案 0 :(得分:36)
您可能必须以管理员身份运行程序/ IDE才能访问该文件夹。我不确定为什么,但我遇到了同样的问题。与默认Windows权限有关。如果有效,请告诉我们!
路径指向文件夹 - 而不是文件。我相信基于C语言的FileStreams实际上必须指向一个文件,而不是一个目录:ie。 C:\Users\Username\Desktop\file.extension
。您可以尝试一下,让我们知道它是否有帮助?
答案 1 :(得分:6)
可能您没有意识到您正在尝试打开Desktop文件夹,然后尝试将其用作文件。
如果您的目的是将图像的字节写入数据库,那么您的代码应该是
fsrw = new FileStream(fname , FileMode.Open, FileAccess.ReadWrite);
答案 2 :(得分:3)
"C:\\Users\\username\\Desktop"
是我的目录;不是文件。
由于您正在尝试打开该文件,因此:
fsrw = new FileStream("C:\\Users\\Sainath\\Desktop", FileMode.Open, FileAccess.ReadWrite);
......应该是
var fullpath = Path.Combine("C:\\Users\\Sainath\\Desktop", fname);
fsrw = new FileStream(fullpath, FileMode.Open, FileAccess.ReadWrite);
答案 3 :(得分:1)
确保使用完全限定名称,包括目标和源的文件名。 (例如C:\ Source \ file.ext,C:\ Destination \ file.ext)
Visual Studio应该与您尝试访问的文件夹具有相同的访问权限。试图访问类似"我的文档"以及您不需要提升访问权限的其他位置不应要求您提升Visual Studio。
你不应该"获得"或者更改您通常可以从运行VS的同一用户访问的文件和文件夹的权限。
答案 4 :(得分:0)
我发现文件的只读标志(设置为on时)将阻止FileStream和MemoryMappedFile对象打开和读取文件。有两种解决方案:取消勾选只读或更改FileStream / MemoryMappedFile以在FileMode.Read/MemoryMappedFileAccess.Read中打开; FileStream的默认读/写行为是“读/写”。