C # Доступ запрещен для любой папки

#c# #windows #winforms

#c# #Windows #winforms

Вопрос:

Когда я выбрал любую папку в

FolderDialogBrowser

я получил сообщение об отказе в доступе к папке. Это касается всех папок, документов, моего компьютера, рабочего стола и т.д., Действительно каждой папки. Я прочитал о пользовательском доступе к папкам (но к каждой папке на диске?) и запускался от имени администратора, но это мне не помогает. Если я отправлю свою программу другу, им придется слишком много играть с доступом к папкам, чтобы выбрать путь? Я вошел в систему под учетной записью администратора, и у меня есть все разрешения, но моя программа нет.

 /*
 * Created by SharpDevelop.
 * User: Tomek
 * Date: 2019-04-05
 * Time: 04:26
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Xml.Linq;

namespace meta_generator
{
    /// <summary>
    /// Description of MainForm.
    /// </summary>
    public partial class MainForm : Form
    {
        public MainForm()
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();

            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
        }

        OpenFileDialog files = new OpenFileDialog();
        FolderBrowserDialog metaOutput = new FolderBrowserDialog();

        string metapath;

        void Button1Click(object sender, EventArgs e)
        {
            files.Filter = "Wszystkie pliki (*.*)|*.*";
            files.Multiselect = true;

            if (files.ShowDialog() == DialogResult.OK)
            {
                foreach (String file in files.FileNames)
                {
                    textBox1.Text = textBox1.Text   ";"   file;
                }
            }
        }

        void Button2Click(object sender, EventArgs e)
        {
            metaOutput.Description = "Wybierz folder gdzie zostanie wygenerowany plik meta.xml";
            metaOutput.RootFolder = Environment.SpecialFolder.MyDocuments;

            if (metaOutput.ShowDialog() == DialogResult.OK)
            {
                metapath = metaOutput.SelectedPath;
                textBox2.Text = metapath;
            }
        }
        void Button3Click(object sender, EventArgs e)
        {
            if (textBox1.Text.Length > 0 amp;amp; textBox2.Text.Length > 0)
            {
                XDocument meta = new XDocument(new XElement("meta"));

                foreach (String file in files.FileNames)
                {
                    XElement childFileTag = new XElement("file");
                    XAttribute sourcepath = new XAttribute("src", file);
                    childFileTag.Add(sourcepath);

                    meta.Root.Add(childFileTag);
                }

                if (checkBox1.Checked)
                    meta.Root.Add(new XElement("oop", "true"));

                meta.Save(metapath);
            }
        }


    }
}

  

Комментарии:

1. @mjwills meta.Save(metapath @"bob.xml"); работает, спасибо. Я думал о meta. Функция сохранения получает только путь к файлу сохранения, но я не думал о имени файла и расширении

Ответ №1:

Проблема заключается в том, что вы используете

 meta.Save(metapath);
  

metapath является именем папки (каталога) (like c:temp , а не именем файла (like c:tempbob.xml ).

При сохранении файла вам необходимо сохранить полный путь (включая имя файла). Примером может быть:

 meta.Save(Path.Combine(metapath, "bob.xml"));
  

В качестве альтернативы, не используйте FolderBrowserDialog — вместо этого используйте SaveFileDialog , чтобы позволить пользователю выбирать свое собственное имя файла.