如何在C#中获取上面目录中的文件地址?

如何在C#中获取上面目录中的文件地址?,c#,file,filepath,C#,File,Filepath,我想从当前目录的文件中获取地址,例如: 我位于MiProyecto/Socket/bin/Debug中,我想从运行在Socket/bin/Debug上的应用程序转到MiProyecto\Ranking\Ranking.xml 我一直在寻找一种通用的方法,但还没有找到具体的解决办法。我不想使用OpenFileDialog 我只知道,要获取正在运行的应用程序的当前目录,请使用string path=application.StartupPath但我不知道如何从这条路爬到Ranking\Ranking

我想从当前目录的文件中获取地址,例如: 我位于
MiProyecto/Socket/bin/Debug
中,我想从运行在
Socket/bin/Debug
上的应用程序转到
MiProyecto\Ranking\Ranking.xml

我一直在寻找一种通用的方法,但还没有找到具体的解决办法。我不想使用OpenFileDialog

我只知道,要获取正在运行的应用程序的当前目录,请使用
string path=application.StartupPath
但我不知道如何从这条路爬到
Ranking\Ranking.xml

我也试过:

string fullPath=Path.Combine(Application.StartupPath,@.\”
Console.WriteLine(“\n\n”+完整路径)

屏幕上的输出:


完整路径写入控制台后,您将无法使用它执行任何操作。您需要将fullPath附加到SerializadorRanking调用——即SerializadorRanking(fullPath+“Ranking.xml”)

相反,您可以通过
Path.Combine
函数附加整个字符串

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

在将
fullPath写入控制台后,您没有对其执行任何操作。您需要将fullPath附加到SerializadorRanking调用——即SerializadorRanking(fullPath+“Ranking.xml”)

相反,您可以通过
Path.Combine
函数附加整个字符串

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

获取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

获取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

使用
Path.Combine()
。\
上一个目录?此文件是否始终位于可执行文件的相同相对路径中?如果您的应用程序对文件系统文件夹有依赖性,该文件夹可能会从一个执行环境更改为下一个,那么您可能会考虑为文件夹设置一个配置值。请尝试使用启动路径创建一个新的System .I.DeCurryInFor实例。该对象应具有.Parent属性或类似属性,以便向上导航。@ne1410s请给我举个例子好吗?@CodeCaster我不工作,另一种解决方案?使用
Path.Combine()
。\
向上移动一个目录?此文件是否始终位于可执行文件的相同相对路径中?如果您的应用程序对文件系统文件夹有依赖性,该文件夹可能会从一个执行环境更改为下一个,那么您可能会考虑为文件夹设置一个配置值。请尝试使用启动路径创建一个新的System .I.DeCurryInFor实例。该对象应具有.Parent属性或类似属性,以便向上导航。@ne1410s请给我举个例子好吗?@CodeCaster我不工作,另一种解决方案?谢谢。像那样的东西看起来像汉克斯。看起来像这样的东西