Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Builder C++ Zapis

Ostatnio zmodyfikowano 2011-12-04 19:38
Autor Wiadomość
DVD93
Temat założony przez niniejszego użytkownika
Builder C++ Zapis
» 2011-12-03 23:58:08
Witam piszę sobie prosty edytor HTML w Borland Builder C++ 6 i mam problem z jedną rzeczą ,a mianowicie podczas zapisu pliku mam problem z nadaniem mu rozszerzenia.

C/C++
void __fastcall TForm1::Zapiszjako1Click( TObject * Sender )
{
    if( SaveDialog1->Execute() )
    {
        if( SaveDialog1->FilterIndex == 1 )
        {
            Memo1->Lines->SaveToFile( SaveDialog1->FileName + ".html" );
            Memo1->Modified = true;
        }
    }
}

Wszystkie filtry mam wypełnione ale jeśli nie dodam +"html" to dostaje plik bez rozszerzenia ,a jeśli je dodam tak jak teraz to przy każdym ponownym otwarciu pliku i jego ponownym zapisie mam o jedno .html więcej np: po 3 otwarciach i ich ponownych zapisach mam plik.html.html.html.

Byłbym bardzo wdzięczny za pomoc przekopałem się przez wiele stron w Google lecz nic nie znalazłem co by pomogło.
P-45115
akwes
» 2011-12-04 01:41:41
To chyba będzie proste :P

Tworzysz nowy plik czyli wymaga pełnej nazwy, bo zostaje zapisany dokładnie tak jak go nazwiesz czyli w Twoim wypadku
nazwa + ".html"

Jeżeli otwierasz plik, to otwierasz plik czyli FileName to "nazwa.html" i zapisujesz jako FileName + ".html". No to jak to ma działać :) ?


Musisz w swoim programie rozróżnić dwie opcje
"Zapisz" oraz "Zapisz jako..."

Pierwsza jeżeli plik jest otwarty to zapisuje go pod OpenDialog->FileName
Jeżeli plik jest nowo utworzony, to zapisuje przez "Zapisz jako..."

a w "Zapisz jako..." masz już okno dialogowe SaveDialog, które ładnie daje domyślne rozszerzenie przez filtr :P
P-45116
DVD93
Temat założony przez niniejszego użytkownika
» 2011-12-04 10:09:35
Mam tak zrobione lecz niestety efekt jest cały czas taki sam. Czy te filtry same nie powinny dodawać rozszerzenia??
P-45117
Dragonit
» 2011-12-04 11:04:58
U ciebie to wygląda tak:
FileName.html  //zapis
Filename.html + ".html"  // kolejny zapis itd...

Pokombinuj w tym kierunku:
nazwaPliku = FileName + ".html";   // określ raz przed zapisem, a nie dodawaj kolejnego rozszerzenia
Memo1->Lines->SaveToFile( SaveDialog1-> nazwaPliku  );   
P-45118
akwes
» 2011-12-04 12:17:38
Filtry są tylko dla użytkownika. One nic nie dodają.

Jaki Borland Builder? To Ci jakiś przykład naskrobie :P

C/C++
void __fastcall TForm1::Button2Click( TObject * Sender )
{
    // Otworz
    if( OpenDialog1->Execute() )
    {
        Memo1->Lines->LoadFromFile( OpenDialog1->FileName );
    }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click( TObject * Sender )
{
    // Zapisz
    /* Jezeli OpenDialog1->FileName jest pusty
            oznacza to to że nie został otwarty przezen plik */
    if( !OpenDialog1->FileName.IsEmpty() )
    {
        /* Jezeli juz otwieralismy plik, to została nam przeslana przez
                        OpenDialog1->FileName pelna nazwa pliku, czyli nazwa pliku i rozszerzenie*/
        Memo1->Lines->SaveToFile( OpenDialog1->FileName );
    }
    else
    {
        /* Wykonujemy funkcje z przycisku trzeciego poniewaz
                        potrzebujemy dialogu do ustalenia przez uzytkownika nazwy
                        pliku*/
        Button3Click( Button1 );
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click( TObject * Sender )
{
    // Zapisz jako
    if( SaveDialog1->Execute() )
    {
        /* Tutaj nie dodajemy nic, ponieważ to użytkownik
                        programu wybiera jak chce zapisac plik. Jeżeli są dobrze
                        ustawione filtry, to nie wpisze nazwy pliku inaczej niż my tego
                        chcemy. Ponieważ filtry będą ograniczac mozliwosci
                        nadania przez niego nazwy pliku (nazwe tutaj rozumiemy jako
                        nazwe pliki wraz z rozszerzeniem */
        Memo1->Lines->SaveToFile( SaveDialog1->FileName );
        /* Teraz mozemy ewentualnie zmienic plik na ktorym pracujemy
                        z tego co widzę nie ma jednolitej zasady co do tego wiec druga linia
                        jest opcjonalna ale zwykle używana */
        /* Ustalamy plik na ktorym aktualnie pracuejmy przez */
        OpenDialog1->FileName = SaveDialog1->FileName;
        /* Nie jest to ladny sposob na zrobienie tego,
                        bo przydalaby sie wlasna zmienna trzymajaca adres
                        aktualnego pliku, no ale niech bedzie */
    }
}
P-45120
DVD93
Temat założony przez niniejszego użytkownika
» 2011-12-04 19:23:23
Dzięki wszystkim za pomoc ;) problem rozwiązałem dodając switcha który przypisywał odpowiednią nazwę do zmiennej DefaultExt ;)

Akwes jeśli jesteś dobry z Buildera to daj jakiś namiar bo pewnie będę miał jeszcze kilka pytań
P-45149
DejaVu
» 2011-12-04 19:38:35
Tu sprawy się załatwia tylko i wyłącznie na forum. Indywidualnego supportu nie praktykujemy. Skoro temat jest rozwiązany to zamykam :)
P-45150
« 1 »
  Strona 1 z 1