web-dev-qa-db-fra.com

L'accès au chemin 'C:\Utilisateurs\xxx\Bureau' est refusé

J'ai effectué une recherche approfondie sur l'ensemble des questions d'accès refusé et je n'ai trouvé aucune question relative à l'accès au formulaire Windows sur mon propre système. Toutes les questions concernent l'application 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);
    }
}
25
Sainath

Vous devrez peut-être exécuter votre programme/IDE en tant qu'administrateur pour accéder à ce dossier. Je ne sais pas trop pourquoi, mais j'ai le même problème. Quelque chose à faire avec les autorisations Windows par défaut. Faites-nous savoir si cela fonctionne!

Modifier:

Le chemin mène à un dossier - pas à un fichier. Je pense que FileStreams dans les langages basés sur C doit en réalité pointer sur un fichier plutôt que sur un répertoire C:\Users\Username\Desktop\file.extension. Pouvez-vous essayer cela et nous faire savoir si cela aide du tout?

36

Vous ne réalisez probablement pas que vous essayez d'ouvrir le dossier Desktop, puis d'essayer de l'utiliser comme fichier.

Si votre intention est d'écrire les octets de l'image dans votre base de données, votre code doit être 

  fsrw = new FileStream(fname , FileMode.Open, FileAccess.ReadWrite);
6
Steve

"C:\\Users\\username\\Desktop" est un répertoire pour moi; pas un fichier.

Depuis que vous essayez d'ouvrir le fichier, ceci:

fsrw = new FileStream("C:\\Users\\Sainath\\Desktop", FileMode.Open, FileAccess.ReadWrite);

... devrait être

var fullpath = Path.Combine("C:\\Users\\Sainath\\Desktop", fname);
fsrw = new FileStream(fullpath, FileMode.Open, FileAccess.ReadWrite);
3
Austin Salonen
  1. Veillez à utiliser un nom complet, y compris le nom du fichier pour la destination et la source. (par exemple, C:\Source\fichier.ext, C:\Destination\fichier.ext)

  2. Visual Studio doit être exécuté avec les mêmes droits d'accès que les dossiers auxquels vous essayez d'accéder. Essayer d'accéder à quelque chose comme "Mes documents" et à d'autres emplacements pour lesquels vous n'avez pas besoin de droits d'accès élevés ne devrait pas vous obliger à élever Visual Studio.

  3. Vous ne devriez pas avoir à "acquérir" ou à modifier les autorisations sur les fichiers et les dossiers auxquels vous pouvez normalement accéder à partir du même utilisateur que vous exécutez VS.

LIEN VERS SOURCE: entrez la description du lien ici

0
LeRoy