web-dev-qa-db-ja.com

パス「C:\ Users \ xxx \ Desktop」へのアクセスが拒否されました

アクセス拒否の質問全体を徹底的に検索しましたが、自分のシステム上の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);
    }
}
26
Sainath

そのフォルダにアクセスするには、管理者としてプログラム/ IDEを実行する必要がある場合があります。理由ははっきりしませんが、同じ問題を抱えています。既定のWindowsアクセス許可と関係があります。機能するかどうかをお知らせください!

編集:

パスは、ファイルではなくフォルダにつながります。 Cベースの言語のFileStreamsは、実際にはディレクトリではなくファイルを指している必要があると思います。 C:\Users\Username\Desktop\file.extension。これを試して、それがまったく役立つかどうか教えてください。

36

おそらく、デスクトップフォルダーを開こうとしてファイルとして使用しようとしていることに気付かないでしょう。

画像のバイトをデータベースに書き込むことが目的の場合、コードは次のようになります。

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

"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
Austin Salonen
  1. 宛先とソースの両方のファイル名を含む完全修飾名を使用してください。 (例:C:\ Source\file.ext、C:\ Destination\file.ext)

  2. Visual Studioは、アクセスしようとしているフォルダーと同じアクセス権で実行する必要があります。 「マイドキュメント」など、アクセスに昇格された権限を必要としない他の場所にアクセスしようとしても、Visual Studioを昇格させる必要はありません。

  3. VSを実行しているのと同じユーザーから通常アクセスできるファイルとフォルダーのアクセス許可を「取得」または変更する必要はありません。

ソースへのリンク: リンクの説明をここに入力

1
LeRoy

ファイルの読み取り専用フラグ(オンに設定されている場合)により、FileStreamおよびMemoryMappedFileオブジェクトがファイルを開いて読み取れないことがわかりました。解決策は2つあります。読み取り専用のチェックを外すか、FileStream/MemoryMappedFileをFileMode.Read/MemoryMappedFileAccess.Readで開くように変更します。 FileStreamのデフォルトの読み取り/書き込み動作は読み取り/書き込みです。

0
davidlbaileysr