C#常见的文件路径Api
2021/5/17 1:25:25
本文主要是介绍C#常见的文件路径Api,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
我们经常有遇到要处理文件路径的需求,那么一般我们常见的有几种:
- 程序下面的文件
- 临时目录下的文件
获取程序下面的文件
首先我们创建了实例解决方案:
其中调用链是:Main.Shell->FooALibrary->,首先我们将FooAFolder.txt和FooA.txt的文件属性设置生成操作为内容,复制到输出目录为始终复制
那么我们有什么方法获取这两个文件的路径,我们可能会用到以下方法:
var currentDomainBaseDirectory = AppDomain.CurrentDomain.BaseDirectory; var result = File.Exists(Path.Combine(currentDomainBaseDirectory, @"FooAFolder\FooAFolder.txt"))? "存在FooAFolder.txt": "不存在FooAFolder.txt"; Console.WriteLine(result); result = File.Exists(Path.Combine(currentDomainBaseDirectory, @"FooA.txt"))? "存在FooA.txt": "不存在FooA.txt"; Console.WriteLine(result); //存在FooAFolder.txt //存在FooA.txt var currentDirectory = System.Environment.CurrentDirectory; result=File.Exists(Path.Combine(currentDirectory, @"FooAFolder\FooAFolder.txt")) ? "存在FooAFolder.txt" : "不存在FooAFolder.txt"; Console.WriteLine(result); result = File.Exists(Path.Combine(currentDirectory, @"FooA.txt")) ? "存在FooA.txt" : "不存在FooA.txt"; Console.WriteLine(result); //存在FooAFolder.txt //存在FooA.txt
主要用到的两种方式就是:
-
获取应用程序域的基目录:
AppDomain.CurrentDomain.BaseDirectory
-
获取当前工作目录的完全限定路径:
System.Environment.CurrentDirectory
但是实际上以上两种方式不是最准和最稳的,还有一种最稳的方式:
获取当前执行程序集的方式:Assembly.GetExecutingAssembly().Location
(推荐方式)
var mainExecuteDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); result = File.Exists(Path.Combine(mainExecuteDirectory, @"FooAFolder\FooAFolder.txt")) ? "存在FooAFolder.txt" : "不存在FooAFolder.txt"; Console.WriteLine(result); result = File.Exists(Path.Combine(mainExecuteDirectory, @"FooA.txt")) ? "存在FooA.txt" : "不存在FooA.txt"; Console.WriteLine(result); //存在FooAFolder.txt //存在FooA.txt //通过反射获取程序集 var fooAssembly = Assembly.GetAssembly(typeof(FooA)); var fooAExecuteDirectory = Path.GetDirectoryName(fooAssembly.Location); result = File.Exists(Path.Combine(fooAExecuteDirectory, @"FooAFolder\FooAFolder.txt")) ? "存在FooAFolder.txt" : "不存在FooAFolder.txt"; Console.WriteLine(result); result = File.Exists(Path.Combine(fooAExecuteDirectory, @"FooA.txt")) ? "存在FooA.txt" : "不存在FooA.txt"; Console.WriteLine(result); Console.ReadLine(); //存在FooAFolder.txt //存在FooA.txt
我们还能再拓展一下,我们在FooA
和 FooB
添加如下代码:
public static class FooB { public static void GetExecutingAssemblyPath() { Console.WriteLine(Assembly.GetExecutingAssembly().Location); } public static void GetCallingAssemblyPath() { Console.WriteLine(Assembly.GetCallingAssembly().Location); } public static void GetEntryAssemblyPath() { Console.WriteLine(Assembly.GetEntryAssembly().Location); } } public static class FooA { public static void ExecuteFooBGetCallingAssemblyPath() { FooB.GetCallingAssemblyPath(); } public static void ExecuteFooBGetExecutingAssemblyPath() { FooB.GetExecutingAssemblyPath(); } } //调用 Console.WriteLine($"{nameof(FooA.ExecuteFooBGetExecutingAssemblyPath)}:"); FooA.ExecuteFooBGetExecutingAssemblyPath(); Console.WriteLine($"{nameof(FooA.ExecuteFooBGetCallingAssemblyPath)}:"); FooA.ExecuteFooBGetCallingAssemblyPath(); Console.WriteLine($"{nameof(FooB.GetExecutingAssemblyPath)}:"); FooB.GetExecutingAssemblyPath(); Console.WriteLine($"{nameof(FooB.GetCallingAssemblyPath)}:"); FooB.GetCallingAssemblyPath(); Console.WriteLine($"{nameof(FooB.GetEntryAssemblyPath)}:"); FooB.GetEntryAssemblyPath();
输出:
ExecuteFooBGetExecutingAssemblyPath: C:\Users\Ryzen\source\repos\CommonFilePathApiSample\Main.Shell\bin\Debug\netcoreapp3.1\FooBLibrary.dll ExecuteFooBGetCallingAssemblyPath: C:\Users\Ryzen\source\repos\CommonFilePathApiSample\Main.Shell\bin\Debug\netcoreapp3.1\FooALibrary.dll GetExecutingAssemblyPath: C:\Users\Ryzen\source\repos\CommonFilePathApiSample\Main.Shell\bin\Debug\netcoreapp3.1\FooBLibrary.dll GetCallingAssemblyPath: C:\Users\Ryzen\source\repos\CommonFilePathApiSample\Main.Shell\bin\Debug\netcoreapp3.1\Main.Shell.dll GetEntryAssemblyPath: C:\Users\Ryzen\source\repos\CommonFilePathApiSample\Main.Shell\bin\Debug\netcoreapp3.1\Main.Shell.dl
我们从上面可以知道以下两种的用法:
- 获取入口程序集路径:
Assembly.GetEntryAssembly().Location
,FooALibrary
和FooBLibrary
的入口都是Main.Shell
- 获取调用该程序集的程序集路径:
Assembly.GetCallingAssembly().Location
,当Main.Shell
调FooBLibrary
,输出Main.Shell
,FooALibrary
调FooBLibrary
,输出FooALibrary
因此,用程序集Assembly的一些路径Api是非常灵活且准确的
获取临时目录下的文件
我们也经常会遇到需要获取临时目录路径的方式来放置一些程序临时文件,可以用下面方式获取:
Console.WriteLine(Path.GetTempPath()); //C:\Users\Ryzen\AppData\Local\Temp\
这篇关于C#常见的文件路径Api的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#