回答 使用path.getfullpath返回本地目录?

Ren6175

成员
加入
2019年8月5日
消息
22
编程经验
Beginner
我之前在这个网站上收到了很多伟大的帮助。我有另一个问题。我有一个程序,可以动态加载来自计算机上的路径的图像。显然,如果我将此程序复制到另一台计算机,路径将不同。我需要动态地找到程序的根目录,以便我可以告诉人们将文件放在哪里,然后我的程序可以正确加载它们。这是path.getfullpath的函数还是有另一种方式做到这一点?
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,158
地点
挪威
编程经验
10+

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,885
地点
切萨皮克,va.
编程经验
10+

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
如果需要选择文件或打开文件夹对话框,则应为您的用户提供一个打开的文件对话框,以便它们可以选择路径。

以编程方式您可以使用这3个不同的版本将返回可执行文件路径。

C#:
        private void Button1_Click(object sender, EventArgs e)
        {
            Console.WriteLine(string.Concat(GetExecutingPath(), @"\"));

            Console.WriteLine(string.Concat(GetExecutingFilesFolder(), @"\"));

            Console.WriteLine(GetExecutingDir());
        }
        public string GetExecutingPath()
        {
                string myExe = Assembly.GetExecutingAssembly().CodeBase;
                UriBuilder buildUri = new UriBuilder(myExe);
                string location = Uri.UnescapeDataString(buildUri.Path);
                return Path.GetDirectoryName(location);
        }
        public string GetExecutingDir()
        {
            return AppDomain.CurrentDomain.BaseDirectory;
        }
        public string GetExecutingFilesFolder()
        {
            return Environment.CurrentDirectory;
        }
如果您不连续连接尾随"\"它们将像这样输出:
C#:
F:\All Storage\2016 Projects\Apps\TestApps\Test\TestCSharpApp\TestCSharpApp\bin\Debug
F:\All Storage\2016 Projects\Apps\TestApps\Test\TestCSharpApp\TestCSharpApp\bin\Debug
F:\All Storage\2016 Projects\Apps\TestApps\Test\TestCSharpApp\TestCSharpApp\bin\Debug\
连接只需添加尾随斜杠。虽然我认为它是一个糟糕的想法将文件转化为您的应用程序根文件夹,但John的帖子将是我建议您遵循的建议。但既然你问道。任何人都将为您工作。
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,158
地点
挪威
编程经验
10+
字符串连接尾随"\"
我更喜欢Path.Combine为此,如果我需要添加组件,它会在需要时处理目录分隔符。
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
嗯,你可以使用约翰哈,但是,我同意,它是编程方式正确的 path.Combine. 在处理Windows路径时,而不是 string.concat..
OP:使用PATH.COMBINE,您也不需要文字字符串来将BlackSlash过滤,因为使用此方法时不需要反斜杠。您还将看到我在上面应用了Johnh的概念,通过获取它来使用图片文件夹 环境.SpecialFolder.,并提供可能使用的例子 path.getfullpath..
C#:
        private void Button2_Click(object sender, EventArgs e)
        {
            string mainPath = (Environment.GetFolderPath(环境.SpecialFolder..MyPictures));
            string personalFolder = "myfolder";
            string fullpath = path.getfullpath(path.comnbine(mainPath,PersonalFolder));
            if (Directory.Exists(fullPath) ? false : true)
            {
                Directory.CreateDirectory(fullPath);
                Console.WriteLine(fullPath);
            }
        }
但是你想要建立你的路径,真的取决于你。如果你想要的话,你可以通过字符串建设来做。一旦你知道你正在做什么以及它们都输出相同的结果,它真的无关紧要。以上和下方做了哪个。据说,微软专门给出了我们用于这些确切目的的方法。虽然第一个剪掉了,但你可以用两行相同。请参阅第三个示例剪贴。至于第二个例子;虽然它没有使用专为我们想要实现的结构方法而设计的结构方法,但它也表现也表现,也是完全相同的工作。  :)
C#:
        private void Button1_Click(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(Environment.GetFolderPath(环境.SpecialFolder..MyPictures));
            int position = sb.Length;
            string folder = @"\myfolder";
            sb.Insert(position, folder);
            if (Directory.Exists(sb.ToString()) ? false : true)
            {
                Directory.CreateDirectory(sb.ToString());
                Console.WriteLine(sb.ToString());
            }
        }
但是为什么可以在两行执行时写下所有代码。
C#:
        private void Button3_Click(object sender, EventArgs e)
        {
            string fullpath = Path.GetFullPath(Path.Combine(Environment.GetFolderPath(环境.SpecialFolder..MyPictures), "myfolder"));
            if (Directory.Exists(fullpath) ? false : true) Directory.CreateDirectory(fullpath);
        }
 
Last edited:

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,158
地点
挪威
编程经验
10+
string fullpath = path.getfullpath(path.comnbine(mainPath,PersonalFolder));
这里没有必要GetfullPath,该组合已经是一个完全合格的路径。
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
到底怎么回事。我的按钮2看起来不那样。 :S.
C#:
        private void Button2_Click(object sender, EventArgs e)
        {
            string fullpath = Path.GetFullPath(Path.Combine(Environment.GetFolderPath(环境.SpecialFolder..MyPictures), "myfolder")));
            Console.WriteLine(fullpath);
            if (Directory.Exists(fullpath) ? false : true) Directory.CreateDirectory(fullpath);
        }
有什么东西搞砸了。这应该是上面的闪烁。实际上,你是对的,我的错误,我忘记了一颗括号! :Roflmao: 今晚不是我的夜晚。
screenshot_28.jpg.


我还修复了帖子7上的一些缺失括号。
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
花了我一秒钟锻炼,为什么富有敏感试图将字符串转换为system.environment .....,然后我注意到屏幕截图中看到的丢失的关闭括号。我,我在这个炎热的天气中都没有运作。证据是哈哈

用法使用 path.getfullpath. with some output.
C#:
        private void Button4_Click(object sender, EventArgs e)
        {
            string dirC = @"dirC";
            string dirD = @"\dirD";
            Console.WriteLine(@"\\MyServer\Network\..\..\LastDirectory");
            Console.WriteLine(Path.GetFullPath(@"\\MyServer\Network\Path1\..\..\LastDirectory"));
            Console.WriteLine(Path.GetFullPath(dirC + dirD));
            Console.WriteLine(Path.GetFullPath(dirD + dirC));
            Console.WriteLine(Path.GetFullPath(dirD + "\\" + dirC));
        }
Output:
\\MyServer\Network\..\..\LastDirectory
\\MyServer\Network\LastDirectory
F:\All Storage\2016 Projects\Apps\TestApps\Test\TestCSharpApp\TestCSharpApp\bin\Debug\dirC\dirD
F:\dirDdirC
F:\dirD\dirC
除了一边,我大多数用习惯写入我的道路,因为我几乎总是与需要纠正的不合格的路径几乎合作。我如何应用于上面(#7)只是让编译器无视它,因为没有任何资格。但我想要指出的;通常它通常是包装格式化路径的最后一个方法,其中URI不是合格的映射路径。

现在晚安  ;)
 
最佳 底部