#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
, чтобы позволить пользователю выбирать свое собственное имя файла.