Permalänk
Medlem

c++ problem

hej!

i min fil för tillfälligt har jag:

myfile.open("c:\\program and files (x86)")

men jag skulle vilja byta ut c: mot t,ex %systemroot% som man kan köra i cmd så hittar den %systemroot% disken själv, finns det något liknade i c++
som jag kan använda mig av?

#include <iostream> #include <process.h> #include <fstream> using namespace std; int main() { ofstream myfile; myfile.open ("c:\\program and files (x86)\\mejantest1.txt"); myfile << "de jag vill ska vara här \n"; myfile.close(); return 0; }

så ser de ut i dax läget...

Visa signatur

Смерть -это решение всех проблем. Нет человека - нет проблемы
Comp1: Ubuntu 16.04 Comp2: Arch Linux
Comp3: Ubuntu Server 16.04 Comp4: Centos 6.5
Comp5: Linux mint 16 Comp6: Raspberry pi (olika OS hela tiden)
Phone: Motorola Google Nexus 6

Permalänk
Medlem

#include <iostream> #include <Windows.h> int main() { TCHAR windir[MAX_PATH]; GetWindowsDirectory(windir, MAX_PATH); char drive = static_cast<char>(windir[0]); std::cout << "Disk: " << drive << std::endl; }

Visa signatur
Permalänk
Hedersmedlem

Om det är en systemvariabel behöver man inte blanda in windows.h

#include <iostream> #include <cstdlib> int main() { char* c = getenv ("systemroot"); if(c != 0) std::cout << c << std::endl; else std::cout << "fel" << std::endl; return 0; }

Permalänk
Medlem
Skrivet av Elgot:

Om det är en systemvariabel behöver man inte blanda in windows.h

#include <iostream> #include <cstdlib> int main() { char* c = getenv ("systemroot"); if(c != 0) std::cout << c << std::endl; else std::cout << "fel" << std::endl; return 0; }

Dock är getenv deprecated i senare versioner av VS, tror msdn rekommenderade något i stil med:

#include <iostream> #include <stdlib.h> using std::cout; using std::endl; int main( void ) { char *pBuffer; size_t pSize; errno_t err = _dupenv_s( &pBuffer, &pSize, "systemroot" ); if ( !err ) { cout << "System root: " << pBuffer << endl; free( pBuffer ); } else cout << "Could not find the specified variable!" << endl; return 0; }

Permalänk
Medlem
Skrivet av Softnux:

#include <iostream> #include <Windows.h> int main() { TCHAR windir[MAX_PATH]; GetWindowsDirectory(windir, MAX_PATH); char drive = static_cast<char>(windir[0]); std::cout << "Disk: " << drive << std::endl; }

detta funkade bra för mig men då har jag en anan fråga istället

TCHAR windir[MAX_PATH]; GetWindowsDirectory(windir, MAX_PATH); char drive = static_cast<char>(windir[0]); path = ":\\mejantest1.txt"; tpath = drive + path;

så långt vet jag de funkar för jag gjorde en likadan fil fast med en cout för att se att de vart rätt sök väg, men om jag visa nästa bit av code så blir de fel i den.

ofstream myfile; myfile.open(tpath);

fstream värka inte tycka om en string variable om jag förstår de hela rätt, men finn det nåt annat jag kan använda mig av? då jag skulle vilja ha en variable i sök vägen i ställe för att behöva skriva.

ofstream myfile; myfile.open("c:\\mejantest1.txt");

då jag tänkte använda mig av samma variable i mer ställen längre ner i coden.

Visa signatur

Смерть -это решение всех проблем. Нет человека - нет проблемы
Comp1: Ubuntu 16.04 Comp2: Arch Linux
Comp3: Ubuntu Server 16.04 Comp4: Centos 6.5
Comp5: Linux mint 16 Comp6: Raspberry pi (olika OS hela tiden)
Phone: Motorola Google Nexus 6

Permalänk
Medlem

Om du vill ha en char* av string kan du skriva typ tpath.c_str(), som när du vill köra open på nån fil... Notera att du inte kan skriva till tpath genom c_str, den är konstant, men läsa går bra.

Permalänk
Medlem

Vad har du för typ på path här:

tpath = drive + path;

I vilket fall så bör du göra på ett anant sätt, ändra kopiera en & en till tpath med += och =
eller kopiera ihop drive & path om båda är av typer char*, sprintf exempelvis. Plusstecknet fungerar endast korrekt för string/sting, string/char och inte mellan två char*.