Opendialog и Ofstream

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем amdk6, 22 июн 2008.

  1. amdk6

    amdk6 Гость

    Добрый день, прошу помочь по поводу OpenDialog-a и потоков.
    К кнопке прописан код создания и записи некого текста в файл. Работает сколько угодно раз пока не задействован OpenDialog. Если открыть OpenDialog и выбрать какой-либо файл, кнопка перестает выполнять прописанный к ней код.

    Код для наглядности:

    Код (Text):
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    OpenDialog1->Execute();
    Edit1->Text = OpenDialog1->FileName;       
    }

    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    ofstream out("data.bat");

    out.write("Alpha", 5);

    out.close();
    }
     
  2. WoodooMan

    WoodooMan Гость

    а обработчик какой кнопки перестает работать, а ты трассировал код, что там творится...
     
  3. amdk6

    amdk6 Гость

    Button2Click, еще не понятно почему любой другой код, например

    Код (Text):
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    Edit1->Clear();
    }
    , работает нормально, а как дело заходит про запись в файл то отказывается.
     
  4. WoodooMan

    WoodooMan Гость

    погоди, т.е. если ты записываешь имя файла в эдит, у тебя перестает писать данные в файл? они по идее никак не связаны...
     
  5. etc

    etc Гость

    Ошибка в 17 строке.
     
  6. amdk6

    amdk6 Гость

    Вот именно. Идея такая - выбираю файл через OpenDialog, а путь что появится в TEdit-е надо записать в файл. Если пишу вручную в TEdit все работает, а если выбираю файл через opendialog, уже не хочет. Я сам не вижу связи между ними, думал ошибка в моей проге, специально создал просто 1 поле TEdit, 2 кнопки и OpenDialog... тоже самое. Есть конечно вариант писать файл через указатель, как в Си, но все-таки хочю разобраться почему конфликтует с потоками.
     
  7. etc

    etc Гость

    Эх ... какой поток сознания, прелесть, залюбуешься ... жаль, что все бестолку ... :(
     
  8. amdk6

    amdk6 Гость

    К чему всю эту чюшь писать? Ты видимо такой всезнайка, из-за таких как ты форумы и пустеют. Видимо ты 222 поста только чюшью и набрал... Продуктивно товарисчь.
     
  9. etc

    etc Гость

    amdk6 Форумы "пустеют" от нехватки нормальных вопросов. Открытие для вас? уже 223
     
  10. amdk6

    amdk6 Гость

    Чем мой вопрос плох? Конкретно. Если ты думаешь что я примиком свалил сюда и написал, без того чтобы потыкать твой любимый F1 или поискать в гугле то глубоко ошибаешся.
     
  11. etc

    etc Гость

    Поиск - уже не плохо.
    Дык, раньше указал - см. #5, ну и конечно - http://linuxmafia.com/faq/Essays/smart-questions.html
    Я вот ваш код скопировал, откомпилировал - работает, так и где проблема?
     
  12. amdk6

    amdk6 Гость

    Разобрался, с флудом пополам.
     
  13. etc

    etc Гость

    Ну так не флудите а расскажите в чем прикол-то был.
     
  14. amdk6

    amdk6 Гость

    Файл создается, только щас случайно заметил, но не возле *.ехе-шки, а в той директории откуда был выбран файл через OpenDialog. (Такой феномен, уж извините, нигде не расписан).
     
  15. etc

    etc Гость

    :( F1 - OpenDialog1->Options = OpenDialog1->Options + [ofNoChangeDir]; и живите спокойно.
    но,
    <>
    Это к вопросу про чушь. :)
    ладно. без обид, приходите еще сюда, поможем ;)
     
  16. amdk6

    amdk6 Гость

    Спасибо за поддержку.
     
  17. EugenOS

    EugenOS Active Member

    Регистрация:
    22 июл 2007
    Сообщения:
    27
    Симпатии:
    0
    Это не феномен - меняется текущая директоря для данного приложения.

    в публичных полях формы прописать поле:
    AnsiString appPath;

    а в конструкторе формы:
    Код (Text):
        appPath = GetCommandLine();
    int slashPos = appPath.LastDelimiter("\\");
    appPath = appPath.SubString( 2, slashPos-1 );
    теперь к имени файла добавляем appPath и проблемы нет.
     

Поделиться этой страницей