użyłemKrótkie filename powodując problemy z dwóch identycznych Ścieżki
Files.createTempFile("Hello", "txt");
aby utworzyć tymczasowy plik i przechowywane wracającą Path
.
Mam Eclipse IFile
zasobu związany z pliku tymczasowego utworzonego:
linkedFile.createLink(tempFile.toUri(), IResource.NONE, null);
Jeśli chcę uzyskać Path
powrotem z tego zasobu, wzywam
linkedFile.getLocation().toFile().toPath()
Na moim komputerze lokalnym działa to w 100% dobrze. Ale na zdalnej maszynie testowej, mam dwie różne ścieżki:
z Files.createTempFile:
C:\Users\USERNA~1\AppData\Local\Temp\Hello3606197456871226795txt
z getLocation().toFile().toPath()
C:\Users\Username_Testing\AppData\Local\Temp\Hello3606197456871226795txt
Folder Username_Testing i tylko ten folder zostanie przekształcony w krótkiej nazwy pliku, a jedynie na mój bezpośredni stworzenie go jako tymczasowego.
Te dwie ścieżki nie są uznawane za równe przez Path.equals(...)
, co powoduje awarię moich testów na zdalnej maszynie.
Generalnie to mnie denerwuje przy użyciu Path.equals(...)
, mimo że w rzeczywistej rzeczywistej pracy aplikacji nie miałem jeszcze żadnych problemów. Czy istnieje sposób, w jaki mogę wymusić na systemie zawsze używanie długich nazw plików? Czy jest coś, czego mi brakuje, powinienem być świadomy, kiedy robię kontrole równości ścieżek, czy konwertuję ścieżki z jednej formy do drugiej?
Aktualizacja nr 1: Ten konkretny problem jest spowodowany przez% TEMP% na docelowym komputerze z systemem Windows zwracającym ścieżkę przy użyciu krótkiej nazwy pliku, która nie występuje na moim komputerze lokalnym. Tylko kod testowy tworzy tymczasowe pliki i foldery, więc nie ma to wpływu na rzeczywistą aplikację. Oczywistym rozwiązaniem mojego obecnego problemu jest fix% TEMP%, więc testy przebiegają dobrze w obu miejscach, ale to rozwiązanie nie jest opłacalne w sensie ogólnym. Byłoby miło, gdyby istniał sposób na naprawienie sytuacji bez modyfikowania komputera docelowego lub przeskakiwania do kodu macierzystego lub specyficznego dla systemu Windows, ponieważ nie użyłem takiego kodu bezpośrednio, aby uzyskać obie ścieżki.
Rozwiązania, które są powiązane, są specyficzne dla systemu Windows; Wolałbym bardziej przenośne rozwiązanie. Poza tym wydaje się, że konwersja do krótkiej nazwy pliku nie powinna być prostą czynnością, ale dostałem ją z 'Files.createTempFile', bez żadnego dodatkowego kodu rodzimego kodu. –
Krótkie ścieżki są oknami tylko o ile wiem. –
Doceniam twoją odpowiedź, jednak łatwiej było i łatwiej przenosić z krótkich ścieżek nazw plików na długie ścieżki nazw plików (ponieważ wydaje się, że jest to standard w Eclipse) w przeciwieństwie do konwersji na krótkie ścieżki nazw plików. –