문제

*nix와 Windows에서 실행해야 하는 프로그램이 있습니다.프로그램은 파일에서 파일 경로를 취하기 때문에 문제는 파일에 대해 무엇을 해야 하는가입니다. \/ 문제.

내 현재 생각은 내가 사용 중인 시스템에 따라 잘못된 것을 올바른 것으로 변환하는 정규식을 넣는 것입니다.이렇게 하면 두 시스템 모두에서 두 유형 중 하나가 작동하도록 하는 효과가 있습니다.사실 외에는 이제 두 가지 문제가 생겼습니다, 다른 문제가 있는 사람이 있나요?

(다른 더 나은 솔루션을 환영합니다)

편집하다:주요 문제는 Windows 경로가 다른 방법이 아닌 Unix에서 작동하도록 하는 것입니다.

도움이 되었습니까?

해결책

/는 Win32에서도 완전히 지원됩니다.

또한 이것을 참조하십시오 관련 질문

다른 팁

Windows는 일반적으로 \ 또는 /를 허용하므로 /를 표준화하면 파일 이름을 완전히 제어할 수 있는 한 문제가 더 간단해질 수 있습니다.

모든 파일 경로 문제를 처리 할 "파일 관리자"클래스를 작성하는 것을 고려 했습니까? 이렇게하면 메일 애플리케이션에서 데이터 파일을로드 할 때 다음과 같은 것을 호출 할 수 있습니다.

LoadApplicationData(FileManager.GetDataFilePath)

그런 다음 파일 관리자가있는 환경을 감지하고 적절한 파일 경로 옵션을 반환합니다. 이렇게하면 Win32 vs. Unix Locatio 표준 (프로그램 파일 대 /USR 등)에 대한 수용을 할 수도 있습니다.

Win32 경로는 드라이브 문자 (UNIX의 아날로그 없음)와 특수 'Forks'(MacOS Pre -X 용어 - 일반적으로 UNIX에서 아날로그가 없지만 MacOS X는 쓸모없고 놀라운)를 고려할 때 복잡합니다. 제공된. 조심하세요.

디렉토리를 나타내는 노드의 트리 구조를 만들기 위해 입력에 대한 구문 분석기를 만듭니다. 그런 다음 디렉토리가 존재하는지 확인하거나 메타 파일을 작성하는 것과 같이 나무를 걷고 원하는 구분자 또는 선택적으로 다른 작업을 수행하여 '저장'할 수 있습니다. 이것은 실제로 내가 지금 내 자신의 응용 프로그램에 유용 할 것이라고 생각하는 것입니다 :-)

당신은 당신이 어떤 언어를 사용하고 있는지 말하지 않았으므로, 나는 이기적으로 c/c ++를 가정 할 것입니다. 후원, 당신이 그것을 기꺼이 사용하려면 파일 시스템 라이브러리. 물론 동적 언어를 사용하는 경우 FS 추상화 라이브러리도 이미 존재할 수 있습니다 (예 : Perl :: Spec는 매우 표준입니다).

당신은 우리에게 어떤 종류의 파일을 읽고 있는지 말하지 않았습니다. 나는 그들이 구성 파일이라고 가정하겠습니다. 이 경우 여러 가지 방법이 있습니다. IMHO 정답은 가능한 경우 경로를 조작하지 않도록 프로그램을 설계하는 것입니다. 여기에 답을 게시했습니다. https://stackoverflow.com/a/40980510/2345997 관련이 있습니다.

방법 :

  1. 사용자가 구성 파일에서 읽는 대신 문제의 경로를 지정할 수있는 명령 줄 옵션을 추가하십시오.
  2. 사용자가 기본 경로를 지정할 수 있도록 명령 줄 옵션을 추가하십시오. 구성 파일의 경로는이 기본 경로 아래에있는 것으로 해석됩니다.
  3. 구성 파일을 3으로 나눕니다. 하나의 파일에는 크로스 플랫폼 구성이 있고 다른 파일에는 Windows 만 구성이 있고 최종 파일에는 Linux 만 구성이 있습니다. 그런 다음 사용자는 Windows와 Linux의 올바른 경로를 지정할 수 있습니다. Windows에서 프로그램은 크로스 플랫폼 구성 파일과 Windows 전용 구성 파일을 읽습니다. Linux에서는 크로스 플랫폼 파일과 Linux 전용 구성 파일을 읽습니다.
  4. 구성 파일 구문 분석에 전처리를 추가하십시오. 이렇게하면 사용자가 프로그램이 실행중인 OS에 따라 파일의 일부 줄을 무시할 수있는 하나의 구성 파일을 가질 수 있습니다. 따라서 사용자는 파일 경로를 두 번 지정할 수 있습니다. Linux의 경우, Windows의 경우에 한 번.
  5. 파일이 항상 실행 파일과 동일한 디렉토리에 있도록 설계를 변경하십시오. 그러면 사용자는 파일 경로가 아닌 구성 파일에 파일 이름 만 지정합니다.
  6. "/"로 ""로 전환하는 간단한 기능을 사용하십시오. 그런 다음 사용자에게 경로를 Linux 경로로 지정해야한다는 것을 사용자에게 문서화하면이 변환이 Windows에 적용됩니다.
  7. 이를 위해 자신만의 경로 미니 언어를 만들어 사용자에게 문서화하십시오. 예 : "/" - 디렉토리 분리기를 지정합니다. {root} - 파일 시스템의 루트로 확장됩니다. {CWD} - 현재 디렉토리로 확장됩니다. 사용자는 다음과 같은 파일 경로를 지정할 수 있습니다.
  8. 일부 경로는 두 플랫폼 모두에서 작동합니다. EG : ../my files/bill.txt와 같은 상대 경로. 이 경로 만으로만 작동하도록 응용 프로그램을 제한하십시오. 이 제한 사항과 응용 프로그램이 사용자에게 경로를 처리하는 방법을 문서화하십시오.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top