Elektroda.pl
Elektroda.pl
X
CControls
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Ustawienie bieżącego katalogu

Paweł Frąckowiak 10 Maj 2009 19:08 822 7
  • #1 10 Maj 2009 19:08
    Paweł Frąckowiak
    Poziom 11  

    Witam!!!

    Chciałbym prosić o pomoc w znalezieniu funkcji która ustawi mi katalog w którym znajdują się pliki do przetwarzania.

    Pisze w VC++ i próbowałem już czegoś takiego:

    int a = SetCurrentDirectory(_T("..\\Dane"));

    ale niestety nie działa.

    Serdecznie z góry dziękuje za pomoc!!!

    0 7
  • CControls
  • CControls
  • #3 10 Maj 2009 19:19
    Paweł Frąckowiak
    Poziom 11  

    To może opisze problem szerzej:

    Tak tworze katalog danych w jednej funkcji
    CreateDirectory("..\\Dane\\",NULL);

    W innej funkcji chciałbym aby w razie zmiany katalogu z którego pobierane są obrazy do przetwarzania ustawić ten katalog jako bieżący, aby funkcja

    tytul.Format(_T("avtcam%d.bmp"), liczba_plikow+1);
    int test = pliki.FindFile(tytul, 0);

    "wiedziała" gdie ma szukać plików.

    0
  • #5 10 Maj 2009 20:29
    Eagle
    Poziom 23  

    Witam,

    Zastanawiam się czy twoim zamiarem jest stworzenie katalogu oraz ustawienie ścieżki katalogu o poziom wyżej (dwie kropki poprzedzające ścieżkę w funkcjach) :
    CreateDirectory i SetDirectory

    Code:

       char PathBefore[MAX_PATH];
       char PathAfter[MAX_PATH];

       DWORD a = GetCurrentDirectory(MAX_PATH,PathBefore);
       BOOL  b = CreateDirectory("..\\Dane\\",NULL);
       BOOL  c = SetCurrentDirectory("..\\Dane");
       DWORD d = GetCurrentDirectory(MAX_PATH,PathAfter);



    Jeśli tak, podaj wynik zmiennych po wykonaniu powyższego, wówczas będzie można wyciągnąć dalsze wnioski.

    Pozdrawiam

    Eagle

    0
  • #6 11 Maj 2009 00:34
    Paweł Frąckowiak
    Poziom 11  

    Widzę, że jeszcze muszę sporo się nauczyć:-)

    zaproponowany przez Ciebie kod zwraca mi następujące dane:

    a = 64;
    b = 1;
    c = 1;
    d = 65;

    PathBefore = "F:\Uczelnia i inne\UCZELNIA\Sensoryka\Projekt\AVTCamera\Dane\cos"

    PathAfter = "F:\Uczelnia i inne\UCZELNIA\Sensoryka\Projekt\AVTCamera\Dane\Dane"

    Dokładnie o co by mi chodziło przedstawia się następująco:
    W jednym okienku mojej aplikacji gdzie uruchamia się przechwytywanie obrazu z kamery tuż przed przed tą właśnie operacją tworzony jest katalog za pomocą funkcji:

    Code:
    CreateDirectory("..\\Dane\\",NULL);


    i na tym koniec jesli chodzi o tworzenie katalogu.
    Teraz w innym okienku mojej aplikacji gdzie uruchamia się przetwarzanie obrazu (przetwarzanie zdjęć zapisanych w katalogu Dane) można pobrać owe obrazy na dwa sposoby. Pierwszy to wczytanie go za pomocą funkcji:

    Code:
       CFileDialog open(true);
    
       open.m_ofn.lpstrInitialDir = _T("..\\Dane\\");
       if (open.DoModal() == IDOK)
       {
          CString sciezka = open.GetPathName();
          obrazek = cvLoadImage(sciezka);
       }


    I Drugi omawiany w tym poście, czyli "automatyczne" znalezienie obrazów o zadanej nazwie w Katalogu Dane i poddanie ich jeden po drugim obróbce:

    Code:
    SetCurrentDirectory("\\Dane");
    
          tytul.Format(_T("..\\Dane\\avtcam%d.bmp"), liczba_plikow+1);
          int test = pliki.FindFile(tytul, 0);


    Problem polega na tym, ze do momentu gdy nie użyje pierwszego sposobu to drugi działa bez zarzutu natomiast gdy użyje ręcznego wyboru pliku i zmienię ten "domyślny" katalog wszystko się sypie i dostaje na twarz komunikat o błędzie.

    Ja bym po prostu chciał aby przed zapisem obrazu w jednym oknie został utworzony katalog (tylko raz oczywiście, bo kod który podałeś sprawił, że tworzył mi się katalog Dane w już istniejącym katalogu Dane) i aby ten katalog był wszędzie domyślnym katalogiem pobierania danych niezależnie od tego czy ręcznie pobiorę dane z innego katalogu czy nie. To chyba na tyle.

    0
  • Pomocny post
    #7 11 Maj 2009 09:52
    Eagle
    Poziom 23  

    Witam,

    Z zamieszczonych informacji widać iż funkcje wykonują się prawidłowo, problem polega na zmianie aktualnego katalogu przez okno wyboru pliku. Rozwiązanie jest proste, pobierz ścieżkę (GetCurrentDirectory) przed wywołaniem tej funkcji z klasy CFileDialog i ustaw ją z powrotem po wyjściu z funkcji ( SetCurrentDirectory).

    Pozdrawiam

    Eagle

    0
  • #8 11 Maj 2009 11:07
    Paweł Frąckowiak
    Poziom 11  

    Wielkie dzięki!!!

    Jak to zwykle bywa rozwiązanie było banalnie proste, niestety dla mnie nie widoczne ot tak:-)

    Raz jeszcze wielkie dzięki!!!

    0