2017-12-12 8 views
0

을 삭제합니다. 그러나 예를 들어 파일 "abc"에서 "ABC"로 이름을 바꾸려고하면 파일이 삭제됩니다. 필자는 파일 이름이 insensitve라는 문제가 있다고 생각합니다 (최소한 Desktop, Windows에서는). 이 (코드에서 나는 왼쪽 주석) 위에서 언급 한 방법의 구현 :LibGDX 파일 핸들 : 파일의 이름을 변경하면 내가 <p><code>FileHandle#moveTo(FileHandle dest)</code></p> <p>그것은 대부분의 경우 잘 작동</p>을 사용하여 파일의 이름을 변경하려면 파일

public void moveTo (FileHandle dest) { 
    if (type == FileType.Classpath) throw new GdxRuntimeException("Cannot move a classpath file: " + file); 
    if (type == FileType.Internal) throw new GdxRuntimeException("Cannot move an internal file: " + file); 
    copyTo(dest); // file is not copied into another file, since "abc" file is the same as the dest "ABC" file 
    delete(); // and here the "original" file is deleted, but in this case original file equals to dest file, so the file is lost 
    if (exists() && isDirectory()) deleteDirectory(); 
} 

질문 :

1) 그런 행동은 의도적인가? 솔직히, 그것은 틀린 느낌입니다. 올바른 방법은 무엇인가,

FileHandle src = ...; 
FileHandle dest = ...; 
src.file().renameTo(dest.file()); 

그렇지 않은 경우 :

2)은 (는이 경우에 작동하지만, 어쩌면 또 다른주의 사항이있다) 이런 식으로 이름을 변경 할 됐나요? @exenza 제안으로

업데이트

는, Windows의 LibGDX의 이슈 트래커

+0

데스크톱 응용 프로그램은 어떤 OS에서 작동합니까? 안드로이드 나 리눅스에서'moveTo' 메쏘드는 "abc"! = "ABC"처럼 잘 동작 할 것입니다. Windows는 파일 이름에 대소 문자를 구별하지 않으므로 afaik – exenza

+0

데스크탑 OS는 Windows입니다. 언급하는 것을 잊었습니다. 네, 안드로이드에는 아무런 문제가 없습니다. 그러나 여전히 옳다고 느끼지는 않습니다. 그러한 방법으로 어떤 플랫폼에서든 동작을 기대하지 않아야합니까? – Arctic45

+1

필자의 견해로는 LibGDX 운영 체제에서 지원하는 모든 동작이 동일해야합니다. 최소한 Windows에서 파일을 삭제해서는 안됩니다. imho. 질문/버그 [LibGDX 문제 추적기] (https://github.com/libgdx/libgdx/issues)를 제기하는 것이 좋습니다. 그럴 경우 여기에 참조를 게시하십시오 – exenza

답변

2

상의 issue을 열고, 파일 이름은 대소 문자를 구분합니다. 즉, "abc"및 "ABC"는 동일한 파일을 참조합니다. copyTo() 호출은 파일을 그 자체로 복사합니다. 그런 다음 delete()이 파일을 삭제합니다. 이 모든 과정에서 하나의 파일 만 있고 사본은 없습니다.

+0

가정을 확인해 주셔서 감사합니다. 이 문제에 대한 편리한 해결책이 있습니까? – Arctic45

+0

@ Arctic45 왜 파일의 이름을 바꾸어야합니까? libGDX는 수동으로 삭제할 필요가 없도록'moveTo()'함수를 가지고 있습니까? –

+0

죄송합니다, 무엇을 의미하는지 확실하지 않습니다. 수동으로 파일을 삭제하지 않습니다. 'FileHandle'에는 오직 하나의'moveTo()'메소드가 있습니다. 그리고 제 질문에는 원래의 구현을 넣었습니다. 나는이 코드를 작성하지 않았습니다. 그리고'rename' 메쏘드가 없으므로'moveTo'를 대신 사용합니다. – Arctic45