태그 보관물: file-systems

file-systems

간단한 바꾸기로 Windows 파일 경로를 Unix 파일 경로로 변환하는 것이 안전합니까? 라이브러리는 모든 백

: 그래서 예를 들어 내 모든 파일이 같은 유닉스 머신에 윈도우 머신에서 전송됩니다 있도록했다 말 C:\test\myFile.txt{somewhere}/test/myFile.txt(드라이브 문자가이 시점에서 무관하다).

현재 우리가 작성한 유틸리티 라이브러리는 모든 백 슬래시를 슬래시로 간단하게 대체하는 방법을 제공합니다.

public String normalizePath(String path) {
   return path.replaceAll("\\", "/");
}

슬래시는 예약되어 있으며 파일 이름의 일부가 될 수 없으므로 디렉토리 구조를 유지해야합니다. 그러나 Windows와 유닉스 경로 사이에 걱정해야 할 다른 합병증이 있는지 확실하지 않습니다 (예 : ASCII가 아닌 이름 등)



답변

예, 경우 에만 교체 할 Windows에서를, 다른 시스템에서 실행 때 전원을 끄십시오.

에 교체를하는 유닉스 계열 시스템입니다 잘못 때문에 \A는 플랫폼 유닉스 계열의 파일이나 디렉토리 이름에 유효한 문자가. 이러한 플랫폼 만 NUL하고는 /파일 및 디렉토리 이름에서 금지된다.

또한 일부 Windows API 함수 (주로 하위 수준 함수) 에서는 슬래시를 사용할 수 없으므로 백 슬래시 와 함께 사용해야 합니다.


답변

예, 그러나이 모든 것은 논점입니다. Java는 Windows에서 슬래시를 백 슬래시로 완벽하게 변환합니다. 구성에 하드 코딩되거나 저장된 모든 경로에 슬래시를 사용할 수 있으며 두 플랫폼 모두에서 작동합니다.

개인적으로, 나는 항상 이스케이프 문자 가 아니기 때문에 Windows에서도 슬래시를 사용합니다 . 원시 경로가 코드에 있거나 속성 파일에 외부화되어 있는지 여부에 관계없이 동일한 방식으로 인코딩합니다.

시도 해봐! 이것은 Windows에서 작동합니다. 분명히 실제 경로를 존재하고 사용자에게 읽을 권한이있는 경로로 변경하십시오.

File f = new File("c:/some/path/file.txt");
if (!f.canRead()) {
  System.out.println("Uh oh, Snowman was wrong!");
}

보너스 : 같은 경로에 슬래시 혼합 할 수도 있습니다 !

File f = new File("c:/some\\path/file.txt");
if (!f.canRead()) {
  System.out.println("Uh oh, Snowman was wrong again!");
}


답변

Windows의 또 다른 문제는 기존 드라이브 문자뿐만 아니라 UNC 표기법도 지원한다는 것입니다.

원격 파일 서버의 파일은로 액세스 할 수 있습니다 \\server\sharename\path\filename.


답변

아니요 . 경로 구분자 ( “\ vs /”)보다 훨씬 더 많은 사항을 고려해야합니다. Rob Y가 언급했듯이 공간을 처리하는 방법과 Windows 사용 빈도가 있습니다. 두 환경에는 서로 다른 잘못된 문자가 있습니다. “\”로 이스케이프 될 때 거의 모든 것을 허용하는 유닉스의 의지가 있습니다. 임베디드 공간을 처리하기 위해 Windows에서 ‘ “‘를 사용하고 Windows에서 UCS-16을 사용하고 Unix에서 ASCII 또는 UTF-8을 사용합니다.

, ,

그러나 조작해야하는 경로 이름에 제약을 줄 수있는 많은 응용 프로그램의 경우 실제로 제안한 방식으로 수행 할 수 있습니다. 그리고 그것은 적어도 많은 경우에 효과가있을 것입니다.


답변

MS-DOS로 시작하는 모든 Microsoft 운영 체제는 커널 수준에서 슬래시와 백 슬래시를 모두 이해했습니다 .

따라서 Windows에서는 자유롭게 이들 사이를 변환 할 수 있습니다. 둘 다 예약 된 구분 기호와 동일한 상태입니다. 유효한 경로에서, 커널에 관한 한 그 의미를 변경하지 않고 백 슬래시를 슬래시로 바꾸거나 그 반대로 바꿀 수 있습니다.

초기 버전의 DOS에서 Microsoft의 command.com인터프리터는 경로를 표시하고 구문 분석하는 데 사용되는 슬래시를 구성 가능한 환경 설정으로 만들었습니다. 그것은 결국 제거되었습니다.

Windows 쉘 ( explorer.exe) 과 같은 Windows의 일부 사용자 공간 프로그램은 슬래시를 좋아하지 않습니다. 그것은 단지 그 프로그램들에서 엉뚱한 프로그래밍입니다.


답변