2012-02-21 27 views
31

Tôi muốn mở một tệp nhất định "directory/subdirectory/file.txt" trong golang. Cách được đề nghị để thể hiện một con đường như vậy trong một cách bất khả tri hệ điều hành (tức là dấu gạch chéo ngược trong Windows, dấu gạch chéo chuyển tiếp trong Mac và Linux) là gì? Một cái gì đó giống như mô-đun os.path của Python?Làm cách nào để tạo đường dẫn tệp crossplatform trong Go?

Trả lời

32

Để tạo và điều khiển đường dẫn dành riêng cho hệ điều hành, hãy sử dụng trực tiếp os.PathSeparator và gói path/filepath.

Phương pháp thay thế là luôn sử dụng '/' và gói path trong suốt chương trình của bạn. Gói path sử dụng '/' làm dấu phân tách đường dẫn bất kể hệ điều hành. Trước khi mở hoặc tạo tệp, hãy chuyển đổi đường dẫn/-parparated thành chuỗi đường dẫn dành riêng cho hệ điều hành bằng cách gọi filepath.FromSlash(path string). Đường dẫn được hệ điều hành trả về có thể được chuyển đổi thành đường dẫn/-parparated bằng cách gọi filepath.ToSlash(path string).

0

Đi có gói path để tham gia và chia nhỏ đường dẫn tệp nhưng bạn không cần sử dụng nó. Đi xử lý dấu gạch chéo về phía trước như là seperator phổ quát. "directory/subdirectory/file.txt" sẽ được mở chính xác bất kể hệ điều hành thời gian chạy là gì.

+1

Bạn đã thử trên Windows chưa? –

+0

@Atom Tôi không sở hữu máy Windows. [Russ Cox nói Go xử lý '/' làm dấu phân tách đường dẫn trên tất cả các nền tảng] (http://groups.google.com/group/golang-nuts/browse_thread/thread/5527660c2d860ca3), điều này dường như đủ tốt đối với tôi. – Jjed

+1

Russ đưa ra nhận xét đó vào ngày 2010-01-09. Đã có một số thay đổi đối với việc xử lý đường dẫn kể từ đó: xem http://golang.org/doc/devel/weekly.html#2011-03-07 –

13

Sử dụng path/filepath thay vì path. path chỉ dành cho các đường dẫn được phân tách bằng dấu gạch chéo chuyển tiếp (chẳng hạn như đường dẫn được sử dụng trong URL), trong khi path/filepath điều khiển các đường dẫn trên các hệ điều hành khác nhau.

+0

Phải được đánh dấu là câu trả lời đúng, khá dễ hiểu hơn - chỉ cần sử dụng filepath ở khắp mọi nơi và ... lợi nhuận! – QtRoS

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