Как я могу получить адрес файла в каталоге выше в C #? - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу получить адрес из файла из текущего каталога, например: я нахожусь в MiProyecto/Socket/bin/Debug и хочу перейти на MiProyecto\Ranking\Ranking.xml из приложения, которое работает на Socket/bin/Debug.

Я искал способ сделать это в общих чертах, но я не нашел конкретного решения.Я не хочу использовать OpenFileDialog .

Единственное, что я знаю, это то, что для получения текущего каталога запущенного приложения используется string path = Application.StartupPath;, но я не знаю, какчтобы подняться с этого пути на Ranking\Ranking.xml

Я тоже пытался:

string fullPath = Path.Combine(Application.StartupPath, @"..\"); Console.WriteLine("\n\n"+fullPath);

Вывод на экран:

enter image description here

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Общий способ получить MiProyecto путь к папке, затем объединить его с / Ranking / Ranking.xml

using System;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string startupPath = Application.StartupPath;
            Console.WriteLine(startupPath); // .../MiProyecto/Socket/bin/Debug

            string folderName = "MiProyecto";
            DirectoryInfo di = new DirectoryInfo(startupPath);

            // Loop until found MiProyecto folder
            while (true)
            {
                if (di.Parent.FullName.EndsWith(folderName))
                {
                    break;
                }
                else
                {
                    di = new DirectoryInfo(di.Parent.FullName);
                }
            }

            Console.WriteLine(di.Parent.FullName); // .../MiProyecto
        }
    }
}

Таким образом, вывсегда получать MiProyecto путь к папке

MiProyecto/A/B/C/D/E/Debug 
MiProyecto/Ranking/Ranking.xml
0 голосов
/ 30 ноября 2018

Вы ничего не делаете с fullPath после записи в консоль.Вам необходимо добавить fullPath к вашему вызову SerializadorRanking - т.е. SerializadorRanking (fullPath + "Ranking.xml");

string fullPath = Path.Combine(Application.StartupPath, @"..\"); 
Console.WriteLine("\n\n"+fullPath);
serializadorRanking = new SerializadorRanking(fullPath + @"Ranking\Ranking.xml");

И наоборот, вы можете просто добавить всю строку с помощью функции Path.Combine.

string fullPath = Path.Combine(Application.StartupPath, @"..\Ranking\Ranking.xml");
serializadorRanking = new SerializadorRanking(fullPath);
...