C# fájl elérési út mentése xml-be

C# fájl elérési út mentése xml-be
2011-01-21T11:00:10+01:00
2011-01-21T13:26:32+01:00
2022-11-20T14:00:41+01:00
Azrael_439
Sziasztok,

A ofdAppPath OpenFileDilaog segítségével szeretném megkapni a kiválasztott fájl teljes elérésí útját, majd ezt megjeleníteni a txtAppPath textboxban.
Ezután a ofdConfigPath OpenFileDialog kiválasztani egy xml fájlt (és az elérési útját megjeleníteni a txtConfigPath textboxban), ami az előbb kiválasztott alklalmazás konfigurációs fájlja és ezért ua. abban a könyvtárban kell, hogy legyen.

Végül mindkét textboxban tárolt stringet szeretném elmenteni a fenti műveleteket végző alkalmazás Settings.xml fájlba.

A problámám az, hogy a SaveXmlData() metódus ott keresi a Settings.xml fájlt, ahonnan a fent említett OpenFileDialog segítségével megkaptam a fájlok elérési útját.
Tehát ha a
C:\Program Files\ZebraDesigner Pro\Bin\Design.exe
-t adtam meg , akkor ezt a hibaüzenet mutatja a debugger a SaveXmlData() metódus xmlDoc.Load(strXmlFile) sornál:

Nem található a következő fájl: "C:\Program Files\ZebraDesigner Pro\Bin\Settings.xml".

Miért van ez? Miért nem látja az strXmlFile-ban megadott paramétert?

A lentiekben található a forráskód:


using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Xml; namespace StopAutoRun { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private string strOwnXmlFile = @".\Settings.xml"; //xm fájl létrehozása private void CreateXmlData() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.AppendChild(xmlDoc.CreateElement("", "Content", "")); XmlElement xmlPaths = xmlDoc.CreateElement("Paths"); XmlElement xmlAppPath = xmlDoc.CreateElement("AppPath"); XmlElement xmlConfigPath = xmlDoc.CreateElement("ConfigPath"); xmlAppPath.InnerText = ""; xmlConfigPath.InnerText = ""; xmlPaths.AppendChild(xmlAppPath); xmlPaths.AppendChild(xmlConfigPath); xmlDoc.DocumentElement.AppendChild(xmlPaths); xmlDoc.Save(strOwnXmlFile); } //Konfig. fájl státusz ell./megjelenítés private bool ConfigStatus() { if (txtConfigPath.Text != "") { lblConfigStatus.Text = "Konfigurációs fájl betöltve."; lblConfigStatus.Refresh(); return true; } else { lblConfigStatus.Text = "Nincs megadva a konfigurációs fájl."; lblConfigStatus.Refresh(); return false; } } //AutoRun vizsgálata a konfig. fájlban private void CheckAutoRun() { if (ConfigStatus()) { XmlDocument xmlConfigDoc = new XmlDocument(); string strXmlFilePath = txtConfigPath.Text; xmlConfigDoc.Load(strXmlFilePath); XmlNodeList nodelistMain = xmlConfigDoc.DocumentElement.ChildNodes; foreach (XmlElement xmlMainElem in nodelistMain) { foreach (XmlElement xmlElem in xmlMainElem) { if (xmlElem.Name.ToString() == "AutoRun" || xmlElem.Name.ToString() == "xmlAutoRun") { switch (xmlElem.InnerText) { case "0": lblAutoRunStatus.Text = "AutoRun kikapcsolva!"; lblAutoRunStatus.ForeColor = System.Drawing.Color.Red; lblAutoRunStatus.Refresh(); break; case "1": lblAutoRunStatus.Text = "AutoRun bekapcsolva."; lblAutoRunStatus.ForeColor = System.Drawing.Color.Green; lblAutoRunStatus.Refresh(); break; default: lblAutoRunStatus.Text = xmlElem.InnerText + " - Nem értelmezhető!"; lblAutoRunStatus.ForeColor = System.Drawing.Color.Black; lblAutoRunStatus.Refresh(); break; } break; } } } } else { lblAutoRunStatus.Text = "Nincs megadva a konfigurációs fájl."; } } //beállítások mentése private void SaveXmlData() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(strOwnXmlFile); XmlNode xmlPaths = xmlDoc.SelectSingleNode("Content//Paths"); xmlPaths["AppPath"].InnerText = txtAppPath.Text; xmlPaths["ConfigPath"].InnerText = txtConfigPath.Text; xmlDoc.Save(strOwnXmlFile); } //Beállítások betöltése private void LoadXmlData() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(strOwnXmlFile); XmlNode xmlPaths = xmlDoc.SelectSingleNode("Content//Paths"); txtAppPath.Text = xmlPaths["AppPath"].InnerText; txtConfigPath.Text = xmlPaths["ConfigPath"].InnerText; } private void Form1_Load(object sender, EventArgs e) { if (!File.Exists(strOwnXmlFile)) { CreateXmlData(); } else { LoadXmlData(); } } //Alkalmazás kiválasztása private void btnChooseApp_Click(object sender, EventArgs e) { OpenFileDialog ofdChooseApp = new OpenFileDialog(); ofdChooseApp.Title = "Alkalmazás kiválasztása"; ofdChooseApp.Filter = "exe|*.exe"; if (txtAppPath.Text != "") { if (File.Exists(txtAppPath.Text)) { ofdChooseApp.InitialDirectory = txtAppPath.Text; } else { ofdChooseApp.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop); } } else { ofdChooseApp.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop); } if (ofdChooseApp.ShowDialog() == DialogResult.OK) { txtAppPath.Text = Path.GetFullPath(ofdChooseApp.FileName).ToString(); txtConfigPath.Text = ""; lblConfigStatus.Text = ""; lblAutoRunStatus.Text = ""; } } // Konfig fájl kiválasztása private void btnChooseConfig_Click(object sender, EventArgs e) { OpenFileDialog ofdChooseConfig = new OpenFileDialog(); ofdChooseConfig.Title = "Konfigurációs fájl kiválasztása"; ofdChooseConfig.Filter = "xml|*.xml"; if (txtAppPath.Text != "") { if (txtConfigPath.Text != "") { if (File.Exists(txtConfigPath.Text)) { ofdChooseConfig.InitialDirectory = txtConfigPath.Text; } else { ofdChooseConfig.InitialDirectory = Path.GetDirectoryName(txtAppPath.Text); } } else { ofdChooseConfig.InitialDirectory = Path.GetDirectoryName(txtAppPath.Text); } if (ofdChooseConfig.ShowDialog() == DialogResult.OK) { string strAppPath = Path.GetDirectoryName(txtAppPath.Text); string strConfigPath = Path.GetFullPath(ofdChooseConfig.FileName).ToString(); if (strConfigPath.Substring(0, strAppPath.Length) == strAppPath) { txtConfigPath.Text = strConfigPath; ConfigStatus(); CheckAutoRun(); } else { &nb
Mutasd a teljes hozzászólást!
Ettől függetlenül még érdekelne a válasz! Hogy lehet, hogy az OpenFileDialog által visszaadott path kerül bele a Settings.xml BaseUri-jába?

Úgy, hogy a relatív útvonalak az "aktuális könyvtár"tól számolódnak. Az aktuális könyvtárt pedig átállítja az openfiledialog (így talál oda legközelebbi megnyitáskor).
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd