Необработанное исключение типа "system. unauthorizedaccessexception"
Я следую учебнику по Подключение C# к MySQL[^]
По какой-то причине , когда я запускаю метод Backup (), я получаю эту ошибку: и я пытаюсь найти файл, но его там нет.
<pre lang="C#">An unhandled exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll Additional information: Access to the path 'C:\MySqlBackup2016-11-4-8-23-4-270.sql' is denied.</pre>
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MySql.Data.MySqlClient; using System.Diagnostics; using System.IO; namespace connect { class DBConnect { private MySqlConnection connection; private string server; private string database; private string uid; private string password; //Constructor public DBConnect() { Initialize(); } //Initialize values private void Initialize() { server = "localhost"; database = "first_db"; uid = "root"; password = ""; string connectionString; connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";"; connection = new MySqlConnection(connectionString); } //open connection to database public bool OpenConnection() { try { connection.Open(); Console.WriteLine("connection opened"); return true; } catch (MySqlException ex) { //When handling errors, you can your application's response based //on the error number. //The two most common error numbers when connecting are as follows: //0: Cannot connect to server. //1045: Invalid user name and/or password. switch (ex.Number) { case 0: Console.WriteLine("Cannot connect to server. Contact administrator"); break; case 1045: Console.WriteLine("Invalid username/password, please try again"); break; } return false; } } //Close connection public bool CloseConnection() { try { connection.Close(); Console.WriteLine("connection closed"); return true; } catch (MySqlException ex) { Console.WriteLine(ex.Message); return false; } } //Insert statement public void Insert() { string query = "INSERT INTO users (id, username, password) VALUES('23' ,'Jojo', '33') , ('99', 'jen', '66')"; //open connection if (this.OpenConnection() == true) { //create command and assign the query and connection from the constructor MySqlCommand cmd = new MySqlCommand(query, connection); Console.WriteLine("values inserted"); //Execute command cmd.ExecuteNonQuery(); //close connection this.CloseConnection(); } } //Update statement public void Update() { string query = "UPDATE users SET username='Joe', password='22', id='33' WHERE username='Joe'"; //Open connection if (OpenConnection() == true) { //create mysql command MySqlCommand cmd = new MySqlCommand(); //Assign the query using CommandText cmd.CommandText = query; //Assign the connection using Connection cmd.Connection = connection; //Execute query cmd.ExecuteNonQuery(); //close connection this.CloseConnection(); } } //Delete statement public void Delete() { string query = "DELETE FROM users WHERE username='Joe'"; if (this.OpenConnection() == true) { MySqlCommand cmd = new MySqlCommand(query, connection); cmd.ExecuteNonQuery(); this.CloseConnection(); } } //Select statement public List<string>[] Select() { string query = "SELECT * FROM users"; //Create a list to store the result List< string >[] list = new List< string >[3]; list[0] = new List< string >(); list[1] = new List< string >(); list[2] = new List< string >(); //Open connection if (this.OpenConnection() == true) { //Create Command MySqlCommand cmd = new MySqlCommand(query, connection); //Create a data reader and Execute the command MySqlDataReader dataReader = cmd.ExecuteReader(); //Read the data and store them in the list while (dataReader.Read()) { list[0].Add(dataReader["id"] + ""); list[1].Add(dataReader["username"] + ""); list[2].Add(dataReader["password"] + ""); } //close Data Reader dataReader.Close(); //close Connection this.CloseConnection(); //return list to be displayed return list; } else { return list; } } //Count statement public int Count() { string query = "SELECT Count(*) FROM users"; int Count = -1; //Open Connection if (this.OpenConnection() == true) { //Create Mysql Command MySqlCommand cmd = new MySqlCommand(query, connection); //ExecuteScalar will return one value Count = int.Parse(cmd.ExecuteScalar()+""); //close Connection this.CloseConnection(); return Count; } else { return Count; } } //Backup public void Backup() { try { DateTime Time = DateTime.Now; int year = Time.Year; int month = Time.Month; int day = Time.Day; int hour = Time.Hour; int minute = Time.Minute; int second = Time.Second; int millisecond = Time.Millisecond; //Save file to C:\ with the current date as a filename string path; path = "C:\\MySqlBackup" + year + "-" + month + "-" + day + "-" + hour + "-" + minute + "-" + second + "-" + millisecond + ".sql"; StreamWriter file = new StreamWriter(path); ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = "mysqldump"; psi.RedirectStandardInput = false; psi.RedirectStandardOutput = true; psi.Arguments = string.Format(@"-u{0} -p{1} -h{2} {3}", uid, password, server, database); psi.UseShellExecute = false; Process process = Process.Start(psi); string output; output = process.StandardOutput.ReadToEnd(); file.WriteLine(output); process.WaitForExit(); file.Close(); process.Close(); } catch (IOException ex) { Console.WriteLine("Error , unable to backup!"); } } /* //Restore public void Restore() { } * */ } }
Что я уже пробовал:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[no name]
"Доступ запрещен"вполне объясним.
Philippe Mori
Прочтите сообщение, а затем проверьте, можете ли вы получить доступ к файлу, а если нет, то почему...
Karthik_Mahalingam
публикуйте только соответствующий блок кода