2009-11-02 17 views
11

Komut satırı argümanlarını ayrıştırmada yardımcı olacak birçok kitaplık buldum, ancak bunların hiçbiri dosya adlarını işlemekle ilgilenmiyor. Komut satırında "../foo" gibi bir şey alırsam, dosyanın tam yolunu nasıl anlarım?Dosya adı komut satırı bağımsız değişkeninin tam yolunu nasıl edinebilirim?

+7

Neden dosyanın tam yoluna ihtiyacınız olduğunu düşünüyorsunuz? Syscalls göreli yollar ile gayet iyi çalışır. –

+0

'pwd' komutunun şu anki yolunuzu/yerinizi verdiğine inanıyorum. Geri kalanını hesaplayabilmelisin ... ama Andrew (yukarıdaki yorum) doğru. –

+1

Benim yardımcı programım bazı metin dosyaları oluşturur, bu yüzden tam yola ihtiyacım var. İnşaat yolları acı gibi geliyor, bu zaten 1000 kez çözülmüş olmalı. –

cevap

15

POSIX realpath() sahiptir.

#include <stdlib.h> 
char *realpath(const char *filename, char *resolvedname); 

TARİFİ
realpath() yol adı olabileceğine işaret fonksiyonu elde dosya, çözünürlük aynı dosya, içermeyen adları mutlak yol adı" bir. '' .. "veya sembolik bağlantılar. Oluşturulan yol adı, çözümlenmiş adı ile gösterilen arabellekte en fazla {PATH_MAX} bayt kadar saklanır.

+0

Düzenleme için teşekkürler, Jonathan; ve özellikle özet için. – pmg

19

Sen onun relative path gelen bir dosyanın absolute path almak için boost::filesystem kullanabilirsiniz:

namespace fs = boost::filesystem; 
fs::path p("test.txt"); 
fs::path full_p = fs::complete(p); // complete == absolute 
std::cout << "The absolute path: " << full_p; 
+4

fs :: mutlak (p) V3 – KindDragon

1

Kabuk betiklerinde "readlink -f" komutu, realpath() işlevine sahiptir.

İlgili konular