C# 访问路径';C:\Users\xxx\Desktop';被拒绝

C# 访问路径';C:\Users\xxx\Desktop';被拒绝,c#,winforms,permissions,access-denied,C#,Winforms,Permissions,Access Denied,我已经彻底搜索了整个拒绝访问问题,在我自己的系统上没有找到任何与访问windows窗体有关的问题。所有问题都与web应用程序有关 public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { byte[] imgdata

我已经彻底搜索了整个拒绝访问问题,在我自己的系统上没有找到任何与访问windows窗体有关的问题。所有问题都与web应用程序有关

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);
    }
}

您可能必须以管理员身份运行程序/IDE才能访问该文件夹。我不太清楚为什么,但我也有同样的问题。与默认Windows权限有关。让我们知道它是否有效

编辑:
路径指向一个文件夹,而不是一个文件。我认为基于C语言的文件流实际上必须指向一个文件,而不是一个目录:即
C:\Users\Username\Desktop\file.extension

可能您没有意识到您正在尝试打开桌面文件夹,然后尝试将其用作文件

如果您的目的是将图像的字节写入数据库,那么您的代码应该是

  fsrw = new FileStream(fname , FileMode.Open, FileAccess.ReadWrite);
“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);
  • 确保使用完全限定的名称,包括目标和源的文件名。(例如C:\Source\file.ext、C:\Destination\file.ext)

  • Visual Studio应以与您尝试访问的文件夹相同的访问权限运行。尝试访问“我的文档”和其他不需要提升权限才能访问的位置不需要提升Visual Studio

  • 您不必“获取”或更改通常可以从运行VS的同一用户访问的文件和文件夹的权限

  • 链接到来源:

    我发现文件的只读标志(设置为on时)将阻止FileStream和MemoryMappedFile对象打开和读取文件。有两种解决方案:取消只读锁定或将FileStream/MemoryMappedFile更改为以FileMode.read/memorymappedficacess.read打开;文件流的默认读/写行为是读/写