c\#흔 한 파일 경로 Api 사용 예시

5946 단어 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
    etcoreapp3.1\FooBLibrary.dll ExecuteFooBGetCallingAssemblyPath: C:\Users\Ryzen\source\repos\CommonFilePathApiSample\Main.Shell\bin\Debug
    etcoreapp3.1\FooALibrary.dll GetExecutingAssemblyPath: C:\Users\Ryzen\source\repos\CommonFilePathApiSample\Main.Shell\bin\Debug
    etcoreapp3.1\FooBLibrary.dll GetCallingAssemblyPath: C:\Users\Ryzen\source\repos\CommonFilePathApiSample\Main.Shell\bin\Debug
    etcoreapp3.1\Main.Shell.dll GetEntryAssemblyPath: C:\Users\Ryzen\source\repos\CommonFilePathApiSample\Main.Shell\bin\Debug
    etcoreapp3.1\Main.Shell.dl
    우 리 는 위 에서 다음 과 같은 두 가지 용법 을 알 수 있다.
  • 입구 프로그램 집합 경로 가 져 오기:Assembly.GetEntryAssembly().Location,FooALibraryFooBLibrary입 구 는 모두Main.Shell
  • 이 프로그램 집합 을 호출 하 는 프로그램 집합 경 로 를 가 져 옵 니 다.Assembly.GetCallingAssembly().Location,당Main.ShellFooBLibrary,출력Main.Shell,FooALibraryFooBLibrary,출력FooALibrary
  • 따라서 프로그램 집합 Assembly 의 일부 경로 Api 는 매우 유연 하고 정확 하 다.
    임시 디 렉 터 리 에 있 는 파일 가 져 오기
    프로그램 임시 파일 을 설치 하기 위해 임시 디 렉 터 리 경 로 를 가 져 오 는 방법 도 자주 있 습 니 다.다음 방법 으로 가 져 올 수 있 습 니 다.
    
    Console.WriteLine(Path.GetTempPath());
    //C:\Users\Ryzen\AppData\Local\Temp\
    이상 은 c\#흔 한 파일 경로 Api 의 사용 예시 에 대한 자세 한 내용 입 니 다.c\#파일 경로 Api 의 사용 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

    좋은 웹페이지 즐겨찾기