2014-04-24 11 views
6

tôi đã sử dụngvấn đề filename gây ngắn với hai Paths khác giống hệt

Files.createTempFile("Hello", "txt");

để tạo ra một tập tin tạm thời và lưu trữ các trở Path.

Tôi có một Eclipse IFile tài nguyên liên quan đến các tập tin tạm thời tôi đã tạo:

linkedFile.createLink(tempFile.toUri(), IResource.NONE, null);

Nếu tôi muốn có được một Path trở lại từ khu vực này, tôi gọi

linkedFile.getLocation().toFile().toPath()

Trên máy địa phương của tôi, điều này hoạt động tốt 100%. Nhưng trên một máy kiểm tra từ xa, tôi nhận được hai con đường khác nhau:

từ Files.createTempFile:C:\Users\USERNA~1\AppData\Local\Temp\Hello3606197456871226795txt

từ getLocation().toFile().toPath()C:\Users\Username_Testing\AppData\Local\Temp\Hello3606197456871226795txt

Folder Username_Testing và chỉ thư mục đó được biến thành một tên tập tin ngắn, và chỉ cho trực tiếp của tôi tạo ra nó như là một tạm thời.

Hai đường dẫn này không được coi là bằng nhau bởi Path.equals(...), điều này gây ra sự thất bại trong các thử nghiệm của tôi trên máy từ xa.

Nói chung, điều này làm cho tôi hơi lo lắng khi sử dụng Path.equals(...) mặc dù trong thực tế hoạt động thực sự của ứng dụng tôi chưa có bất kỳ vấn đề nào. Có cách nào tôi có thể buộc hệ thống phải luôn luôn sử dụng tên tệp dài không? Có một cái gì đó tôi là mất tích mà tôi cần phải nhận thức được khi tôi làm kiểm tra bình đẳng đường dẫn, hoặc khi chuyển đổi đường dẫn từ một hình thức khác?

Cập nhật # 1: Vấn đề cụ thể này được gây ra bởi% TEMP% trên máy tính mục tiêu trở về đường dẫn bằng tên tệp ngắn, điều đó không xảy ra trên máy cục bộ của tôi. Chỉ mã thử nghiệm mới tạo các tệp và thư mục tạm thời để điều này không ảnh hưởng đến ứng dụng thực. Giải pháp rõ ràng cho vấn đề hiện tại của tôi là sửa% TEMP% để các thử nghiệm chạy tốt ở cả hai nơi, nhưng giải pháp này không thể thực hiện được theo nghĩa chung. Nó sẽ là tốt đẹp nếu có một cách để khắc phục tình hình mà không sửa đổi máy tính mục tiêu hoặc nhảy vào mã nguồn gốc hoặc cửa sổ cụ thể, vì tôi không sử dụng mã trực tiếp để có được cả hai đường dẫn.

Trả lời

2

Tôi đã tìm thấy giải pháp di động tốt cho vấn đề của mình, không cần sử dụng bất kỳ mã nền tảng cụ thể nào.Câu trả lời là thực sự khá đơn giản:

Path.toRealPath()

sử dụng một cái gì đó như thế này:

Path correctedTempFile = tempFile.toRealPath()

Về cơ bản, nó hiện đang sử dụng phiên bản toRealPath(), mà may mắn loại bỏ các tên tập tin ngắn, để so sánh với các đường dẫn khác được lấy từ các tài nguyên Eclipse. Tôi tin rằng việc triển khai Eclipse chỉ sử dụng đường dẫn dài để nhất quán, vì vậy tôi sẽ sử dụng toRealPath để loại bỏ mọi đường dẫn tiềm năng có thể sử dụng tên tệp ngắn

1

Câu hỏi này có thể giúp:

Is there a way to generate the 8.3 or 'short' (Windows) version of a file name in Java?

Bạn có thể lấy đường dẫn ngắn và so sánh con đường tạo ra chống lại cả, do đó bạn biết cái nào để sử dụng.

+0

Các giải pháp được liên kết rất đặc trưng cho Windows; Tôi thích một giải pháp di động hơn. Ngoài ra, có vẻ như việc chuyển đổi sang một tên tập tin ngắn không phải là một điều dễ hiểu, nhưng tôi đã nhận được nó từ 'Files.createTempFile', mà không cần thêm bất kỳ đoạn mã nguồn gốc nào khác. –

+0

tên đường dẫn ngắn chỉ là cửa sổ theo như tôi biết. –

+0

Tôi đánh giá cao câu trả lời của bạn, tuy nhiên việc chuyển đổi từ đường dẫn tên tệp ngắn sang đường dẫn tên tệp dài hơn dễ dàng hơn (vì đó dường như là tiêu chuẩn với Eclipse) thay vì chuyển đổi sang đường dẫn tên tệp ngắn. –

Các vấn đề liên quan