Hej!
Håller på att öva lite på att läsa och skriva från och till filer. I de exempel jag tagit del av verkar det förutsättas att läser rån och skriver till ligger i samma mapp som man startade programmet ifrån, vilket ju sällan är fallet. Frågan är då om man kan ange hela sökvägar istället för bara filnamn. Det kan ju verka lite vanskligt, eftersom man anger sökvägar på olika sätt i olika operativsystem, exempelvis att man använder / i Unix och Linux och \ i Windows och DOS. I och för sig är det oftast användaren som anger sökvägar på ett eller annat sätt i programmet, men ändå...
Och hur kommer man åt miljövariabler i C++? Anta att jag vill lägga en fil i /home/<användarnamn>, och det ska fungera oavsett vilken användare man är. Hur kommer jag då åt $HOME inifrån ett C++-program? Eller är det ~ som gäller?
Och för tillfället vald mapp verkar vara lagrad i $PWD, den skulle också vara intressant att komma åt. Kanske lika bra att veta hur man kommer åt ALLA miljövariabler, i och för sig...
J.R.
Fler dumma C++-frågor om bland annat miljövariabler (Linux) [LÖST]
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Fler dumma C++-frågor om bland annat miljövariabler (Linux) [LÖST]
Senast redigerad av 1 DrMegahertz, redigerad totalt 31 gånger.
- Smygis
- Inlägg: 849
- Blev medlem: 21 jun 2006, 18:41
- OS: Ubuntu
- Utgåva: 24.04 Noble Numbat LTS
- Ort: Kramfors
SV: Fler dumma C++-frågor om bland annat miljövariabler (Linux)
man använder getenv som ligger i cstdlib.
smygis@Bob:~$ cat envtest.cpp
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
char *env = getenv("HOME");
cout << env << endl;
}
smygis@Bob:~$ g++ -Wall envtest.cpp -o envtest
smygis@Bob:~$ chmod +x envtest
smygis@Bob:~$ ./envtest
/home/smygis
smygis@Bob:~$
smygis@Bob:~$ cat envtest.cpp
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
char *env = getenv("HOME");
cout << env << endl;
}
smygis@Bob:~$ g++ -Wall envtest.cpp -o envtest
smygis@Bob:~$ chmod +x envtest
smygis@Bob:~$ ./envtest
/home/smygis
smygis@Bob:~$
A Foolish Consistency is the Hobgoblin of Little Minds.Beware: In C++, your friends can see your privates!
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
SV: Fler dumma C++-frågor om bland annat miljövariabler (Linux)
Se där, snabbt svarat!Smygis skrev: man använder getenv som ligger i cstdlib.
smygis@Bob:~$ cat envtest.cpp
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
char *env = getenv("HOME");
cout << env << endl;
}
smygis@Bob:~$ g++ -Wall envtest.cpp -o envtest
smygis@Bob:~$ chmod +x envtest
smygis@Bob:~$ ./envtest
/home/smygis
smygis@Bob:~$
Och i de exempel man ofta ser på hur man läser och skriver till och från filer, kan man ersätta filnamn med sökvägar, eller? Eller med andra ord, är det tillåtet att skriva saker som MinFil.open("/home/guraknugen/MinFil.txt"); eller rent av MinFil.open("../../Blaha/MinAndraFil.dat");?
Om inte, hur gör man istället?
J.R.
-
- Inlägg: 6191
- Blev medlem: 14 jan 2007, 19:31
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Ort: Stockholm
SV: Fler dumma C++-frågor om bland annat miljövariabler (Linux)
Jodå, både relativa och absoluta sökvägar fungerar till open(), d.v.s. sökvägar som börjar på .. respektive /. Däremot kan man inte använda ~ direkt utan det måste översättas med t.ex. getenv("HOME"). Men man kan ju också få fram hemkatalogen med getpwent(), jag vet inte vad som är mest korrekt. Fördelen med getpwent() är att det fungerar med andra användare än den som kör programmet, så om man vill översätta t.ex. ~root så är det getpwent() som gäller.
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
SV: Fler dumma C++-frågor om bland annat miljövariabler (Linux)
Är förresten inte cstdlib ett bibliotek som enbart finns till för kompatibilitet med C? Finns det inget "renodlat" C++-bibliotek med samma möjlighet?
- Smygis
- Inlägg: 849
- Blev medlem: 21 jun 2006, 18:41
- OS: Ubuntu
- Utgåva: 24.04 Noble Numbat LTS
- Ort: Kramfors
SV: Fler dumma C++-frågor om bland annat miljövariabler (Linux)
Nej. Varför återuppfinna hjulet?Johnny Rosenberg skrev: Är förresten inte cstdlib ett bibliotek som enbart finns till för kompatibilitet med C? Finns det inget "renodlat" C++-bibliotek med samma möjlighet?
Senast redigerad av 1 Smygis, redigerad totalt 20 gånger.
A Foolish Consistency is the Hobgoblin of Little Minds.Beware: In C++, your friends can see your privates!
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt: