2009-05-31 38 views
8

Tôi đang cố gắng mở tệp bằng C++ và máy chủ chương trình chạy trên được dựa trên tux.Mở một tệp trên Unix bằng cách sử dụng C++

string filename = "../dir/input.txt"; works but 
string filename = "~jal/dir1/dir/input.txt"; fails 

Có cách nào để mở tệp bằng C++ khi tên tệp được cung cấp ở định dạng thứ hai không?

Trả lời

12

Việc mở rộng ~jal được thực hiện bởi vỏ (bash/csh/bất kỳ), không phải bởi chính hệ thống, do đó chương trình của bạn đang cố gắng xem thư mục có tên ~jal/, chứ không phải /home/jal/.

Tôi không phải là một coder C, nhưng getpwent() có thể là những gì bạn cần.

+0

+1 để ghi nhớ những điều cơ bản ... duh .... – ojblass

+0

Tôi có nghĩa là duh của tôi không phải là poster của câu hỏi. – ojblass

+0

Magnus, $ HOME chứa * homedir của bạn - và ~ jal mở rộng đến homedir của người dùng 'jal'. – grawity

9

Bạn có thể quét chuỗi, thay thế ~user theo thư mục thích hợp.

Các POSIX chức năng wordexp nào đó, và một vài thứ khác

  • thay biến, như bạn có thể sử dụng $HOME
  • tùy chọn thay thế lệnh, như $(echo foo) (có thể bị vô hiệu hóa)
  • mở rộng số học, như $((3+4))
  • tách từ, như tách ~/a ~/b thành hai từ
  • mở rộng ký tự đại diện, như *.cpp
  • và trích dẫn, như "~/a ~/b" vẫn là
+1

+1, tôi không biết về wordexp. – zvrba

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