Avatar billede mcgoat Nybegynder
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();
Avatar billede jpk Nybegynder
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.
Avatar billede mcgoat Nybegynder
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
Avatar billede squashguy Nybegynder
02. september 2003 - 10:27 #3
under windows kan du bruge

char path[MAX_PATH];
GetCurrentDirectory(MAX_PATH, path);
Avatar billede jpk Nybegynder
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('\\'));
}
Avatar billede jpk Nybegynder
02. september 2003 - 10:30 #5
squashguy >> current dir kan sagtens være noget andet, end der hvor .exe-filen ligger.
Avatar billede mcgoat Nybegynder
02. september 2003 - 11:02 #6
Er der virkelig ikke en property som viser hvilken mappe exe filen ligger i?? er da underligt...
Avatar billede jpk Nybegynder
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...
Avatar billede mcgoat Nybegynder
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....
Avatar billede jpk Nybegynder
02. september 2003 - 11:23 #9
Har String ikke en metode som hedder fx SubStr, Left, Mid, eller lign..?
Avatar billede mcgoat Nybegynder
02. september 2003 - 11:24 #10
jo SubString...
Avatar billede jpk Nybegynder
02. september 2003 - 11:27 #11
Og hvad med FindLast, ReverseFind eller lign..?
Avatar billede mcgoat Nybegynder
02. september 2003 - 11:29 #12
Nahh... Er noget med AnsiPos og sådn... men ellers ikke :o(
Avatar billede jpk Nybegynder
02. september 2003 - 11:31 #13
Hvad med IndexOf?
Avatar billede mcgoat Nybegynder
02. september 2003 - 11:37 #14
nahh
Avatar billede mcgoat Nybegynder
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
Avatar billede jpk Nybegynder
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...
Avatar billede mcgoat Nybegynder
02. september 2003 - 12:18 #17
Jahh, det er jo bare lige hvordan? :o( lidt noget skod....
Avatar billede jpk Nybegynder
02. september 2003 - 12:33 #18
Er der ikke noget online dokumentation til String, som jeg kan se?
Avatar billede mcgoat Nybegynder
02. september 2003 - 12:39 #19
Avatar billede mcgoat Nybegynder
02. september 2003 - 12:42 #20
Avatar billede mcgoat Nybegynder
02. september 2003 - 12:43 #21
Kan også få det ud som en const char*: ged.c_str()
Avatar billede mcgoat Nybegynder
02. september 2003 - 12:53 #22
Nåhh, har bare lavet det statisk... tak for hjælpen, smid et svar
Avatar billede jpk Nybegynder
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('\\'));
}
Avatar billede jpk Nybegynder
02. september 2003 - 12:55 #24
STL's string er standard i C++ og virker derfor også på andre platforme
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester