Graphisoft®

InputOutputVersion: 1.0

Location class



설명 파일 시스템 내 엔트리(파일, 폴더, 링크)들의 절대 주소. 자세히...
모듈 InputOutput
Base classes GS::Object
Derived classes -
헤더 Location.hpp


Public 메소드


    생성자

    복사 생성자
    operator=

    static New

상태 쿼리

    GetStatus

글로벌 설정 / 쿼리

    Set
    Clear
    IsEmpty

네트워크 주소 동작

    GetNetworkName
    SetNetworkName
    GetLastNetworkName
    SetLastNetworkName

    AppendToNetwork

    DeleteNetworkName
    DeleteLastNetworkName
    MoveLastNetworkName
    ClearNetwork

    GetNetworkLength
    IsLocal

로컬 주소 동작


    GetLocalName
    SetLocalName
    GetLastLocalName
    SetLastLocalName

    AppendToLocal

    GetDifference

    DeleteLocalName
    DeleteLastLocalName
    MoveLastLocalName
    ClearLocal

    GetLocalLength
    IsRoot

비교

    operator==
    operator!=

    IsAncestorOf

변환

    ToPath
    ToPOSIXPath
    ToFSRef
    ToCFURL
    ToFSSpec (더 이상 사용하지 않음)
    ToURL

    ToDisplayText

플랫폼 의존성 지원

    IsLegal
    IsMultiplatform

I/O

    읽기  -> GS::Object
    쓰기  -> GS::Object

디버그

    인쇄  -> GS::Object


설명

Location은 파일 시스템 내 엔트리(파일, 폴더, 링크)들의 주소 또는 경로입니다. 파일 시스템은 파일 시스템 엔트리들의 계층적 구조(트리)입니다. 트리의 내부 노드들은 (머신 또는 하위 네트워크의) 폴더이며 leaf 노드들은 파일 또는 빈 폴더입니다. (참고로 로컬 파일 시스템이라는 용어는 독립형 머신의 전통적인 파일 시스템을 가리키는 반면, 파일 시스템이라는 용어는 전체 네트워크를 포함하도록 일반화되어 있습니다) 모든 엔트리는 자신과 관련된 Name을 갖고 있는데, 이것은 컨텍스트 (부모 폴더) 안에서 유일합니다. 파일 시스템은 트리이므로, 특정 엔트리에 대하여 내부 노드(폴더, 머신 또는 하위 네트워크)들을 통해 파일 시스템의 루트로부터 명확한 단일 경로가 있습니다. 이 경로는 이름들의 시퀀스를 산출합니다. Location은 사실 이름들의 시퀀스이지만, 존재하지 않는 엔트리들을 참조할 수 있습니다. (사용자는 임의의 위치들을 만들 수 있음) 위치의 구조는 다음과 같습니다:

 

 

Location은 2개의 주요 파트를 갖고 있습니다: 네트워크 주소와 로컬 주소. 각 주소는 임의의 긴 이름들의 시퀀스로 구성되며, 각 이름은 임의의 긴 문자들의 시퀀스로 구성됩니다. 이 주소들은 여러 가지 메소드들을 이용하여 자유롭게 조작할 수 있습니다. 네트워크 주소는 네트워크 상의 특정 엔트리를 포함하는 머신의 위치를 결정합니다. 만약 네트워크 주소가 비어 있다면, 위치를 로컬로 취급합니다. 이것은 현재 머신의 로컬 파일 시스템을 참조하고 있음을 의미합니다. 로컬 주소는 주어진 머신의 로컬 파일 시스템 내부의 특정 엔트리의 위치를 결정합니다. 만약 로컬 주소가 비어 있다면, 위치는 주어진 머신의 로컬 파일 시스템의 루트를 참조합니다. 이 루트는 일부 플랫폼에서는 가상이라는 것을 참고하십시오. 예. Windows와 Macintosh 상에서 볼륨들을 포함합니다. (논리적 드라이브)

일반적으로 위치의 내용과 관련된 제한은 없지만 특정 플랫폼에서 사용 지점에 일부 제한이 있을 수 있습니다. 예를 들어 파일을 생성할 때 Windows에서 위치는 '|'또는 '*'와 같은 일부 특수 문자들을 포함할 수 없습니다. 사용자는 현재 플랫폼에서 (IsLegal 메소드를 이용하여), 또는 (IsMultiplatform 메소드를 이용하여) InputOutput 모듈이 지원하는 모든 플랫폼에서 위치가 구문적으로 합법적인지 여부를 확인할 수 있습니다. 구문적으로 합법이라는 것은 단순히 그러한 위치를 가진 파일 시스템 엔트리가 존재할 수도 있고, 실제로 존재하는 것은 아니라는 것을 의미합니다.

위치들은 영구적으로 저장될 수 있고 나중에 복원할 수 있습니다. 위치들은 몇 가지 제한사항을 가진 채 플랫폼 간 포팅이 가능합니다. (고립된 Location 객체를 고려되는 한, 그 내용은 항상 적절하게 복원되고 나중에 조작될 수 있지만, 실제 사용 시점에서는 특정 시스템에서 사용할 수 없는 것으로 판명될 수 있다는 점을 참고하십시오) 첫째, IsMultiplatform 메소드에 따라 위치는 다중 플랫폼이어야 합니다. 다중 플랫폼 local 위치들은 이동이 가능합니다. 둘째, 네트워크 프로토콜에 대한 몇 가지 제한사항이 있습니다. 다음 표는 이동성 (및 복원성) 프로퍼티들을 요약합니다. 대상 네트워크 프로토콜이 있는 시스템에서 소스 네트워크 프로토콜이 있는 시스템에 저장된 Location 객체를 올바르게 사용할 수 있는지 여부를 지정합니다. 올바른 사용이란 원래 위치에 의해 참조된 엔트리가 대상 시스템에서 올바르게 접근(참조)될 수 있다는 것을 의미합니다.

소스 \ 대상

Windows

Mac: AppleTalk

Mac: TCP / IP

Mac: 그 외 (예. Dave)

Windows OK OK* 반드시 볼륨을 마운트해야 함 반드시 볼륨을 마운트해야 함
Mac: AppleTalk OK OK OK OK
Mac: TCP / IP OK OK OK OK
Mac: 그 외
(예. Dave)
- OK OK OK

* 현재 Windows가 지원하는 1 레벨 플랫(flat) 네트워크 모델은 서버 이름만 사용합니다. (하위 네트워크가 없음) Macintosh AppleTalk은 2 레벨 존-서버(zone-server) 네트워크 모델입니다. 플랫(flat)에서 존-서버(zone-server) 모델로 포팅할 때, 주어진 서버에 대한 모든 구역(zone)에서 검색을 수행하며 약간의 시간이 걸릴 수 있습니다. 그러나 서버를 발견하면 볼륨이 마운트되므로 검색 없이 후속 참조들이 해결(resolved)될 수 있습니다. 당연히 서로 다른 구역들에서 같은 이름을 가진 서버들은 예측할 수 없는 결과를 초래할 수 있습니다.

위치는 (적어도 로컬 머신에 절대적인) 절대 주소를 나타냅니다. 때로는 1개의 절대 주소와 여러 개의 상대 주소들을 다루는 것이 더 편리합니다. 이것은 class RelativeLocation에서 제공합니다. 상대 위치는 조작, 저장, 복원될 수 있으며 최종적으로 절대 위치에 추가될 수 있다.

Location 클래스의 구현은 공간과 속도에 모두 고도로 최적화되어 있습니다. 복사 생성자와 할당 연산자는 빠르며 추가 Heap 공간이 필요하지 않습니다. 내부적으로 위치들은 공동 공유 트리에 저장됩니다. 비슷한 위치들은 다른 세그먼트들에 대해서만 추가 공간을 필요로 합니다.


참고:
const Name&를 예상할 수 있는 모든 메소드에서 C 문자열도 전달될 수 있습니다. 왜냐하면 char*에서 Name으로의 암묵적인 변환이 있기 때문입니다.


참고사항

Name, RelativeLocation, File, Folder

Location 획득하기