02. september 2003 - 09:52
Der er
23 kommentarer og 1 løsning
Oprettelse af fil / path
Hej.... Jeg har følgende kode i BCB5, hvor jeg vælger at gemme filen på D:\, men hvordan vælger jeg at den skal gemme i det samme Dir som EXE filen ligger?? hvis jeg bare fjerner D:\\, så lægger den der ikke.... FILE *stream; char *ToSave = "#1="; stream = fopen("D:\\Easyconfig.ini", "w"); if (stream) { strcat(ToSave,Directory->Directory.c_str()); fputs(ToSave,stream); fclose(stream); frmMain->SaveDir = Directory->Directory; } Close();
Annonceindlæg fra Publicis Sapient
02. september 2003 - 09:58
#1
Under Windows kan du finde sti + navn på din exe ved at bruge GetModuleFileName(), du kan så bruge stien som basis når du gemmer filer.
02. september 2003 - 10:14
#2
Der må da næsten være en nemmere måde, ellers skal jeg jo også til at filtrere EXE filens navn væk
02. september 2003 - 10:27
#3
under windows kan du bruge char path[MAX_PATH]; GetCurrentDirectory(MAX_PATH, path);
02. september 2003 - 10:29
#4
At "kappe" lidt af strengen er da ikke galt... Her er et eksempel der anvender MFC's CString: (jo, jeg ved godt du ikke bruger CString, men ideen er der...) CString CMyApp::GetExePath() { TCHAR szEXEPathname[_MAX_PATH]; GetModuleFileName(NULL, szEXEPathname, _MAX_PATH); CString ExeName(szEXEPathname); return ExeName.Left(ExeName.ReverseFind('\\')); }
02. september 2003 - 10:30
#5
squashguy >> current dir kan sagtens være noget andet, end der hvor .exe-filen ligger.
02. september 2003 - 11:02
#6
Er der virkelig ikke en property som viser hvilken mappe exe filen ligger i?? er da underligt...
02. september 2003 - 11:14
#7
Øh, hvor skulle den property være..? Windows' filsystem har værdien for filens parent dir, men den skal du jo bruge runtime, i dit program... Borlands Windows wrapper classes kunne naturligvis godt have en property, det skal jeg ikke kunne sige...
02. september 2003 - 11:18
#8
Kunne jo godt have været en Application->GetExeDir(); eller noget... men det er der ikke... Jeg kan finde hele stien C:\blah\project1.exe String TEST; TEST = Application->ExeName; Så er det bare lige hvordan jeg filtrerer \project1.exe fra....
02. september 2003 - 11:23
#9
Har String ikke en metode som hedder fx SubStr, Left, Mid, eller lign..?
02. september 2003 - 11:24
#10
jo SubString...
02. september 2003 - 11:27
#11
Og hvad med FindLast, ReverseFind eller lign..?
02. september 2003 - 11:29
#12
Nahh... Er noget med AnsiPos og sådn... men ellers ikke :o(
02. september 2003 - 11:31
#13
Hvad med IndexOf?
02. september 2003 - 11:37
#14
nahh
02. september 2003 - 11:39
#15
Man kan gøre det sådan: String ged; ged = Application->ExeName; int size = strlen(ged.c_str()); ged = ged.SubString(1,size-12); ShowMessage(ged); Men det kræver så at der ikke er nogen der renamer exe filen.. for lige nu minuser jeg med 12 da strlen(project1.exe) == 12
02. september 2003 - 11:46
#16
Der må da være en form for Find-metode til at finde '\' (backslash), ellers kan du naturligvis selv lave en...
02. september 2003 - 12:18
#17
Jahh, det er jo bare lige hvordan? :o( lidt noget skod....
02. september 2003 - 12:33
#18
Er der ikke noget online dokumentation til String, som jeg kan se?
02. september 2003 - 12:39
#19
02. september 2003 - 12:42
#20
02. september 2003 - 12:43
#21
Kan også få det ud som en const char*: ged.c_str()
02. september 2003 - 12:53
#22
Nåhh, har bare lavet det statisk... tak for hjælpen, smid et svar
02. september 2003 - 12:53
#23
Hmm, den har godt nok en find-metode, nemlig Pos, men den virker fra starten af strengen... Det er vist ikke komplet dok? Hvad med at bruge STL's string? #include <string> using std::string; string CMyApp::GetExePath() { TCHAR szEXEPathname[_MAX_PATH]; GetModuleFileName(NULL, szEXEPathname, _MAX_PATH); string ExeName(szEXEPathname); return ExeName.substr(ExeName.rfind('\\')); }
02. september 2003 - 12:55
#24
STL's string er standard i C++ og virker derfor også på andre platforme
Kurser inden for grundlæggende programmering