Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Opendialog и Ofstream
Форум программистов > Системное программирование > C, С++ и С Builder > Borland C++ Builder & Kylix
amdk6
Добрый день, прошу помочь по поводу OpenDialog-a и потоков.
К кнопке прописан код создания и записи некого текста в файл. Работает сколько угодно раз пока не задействован OpenDialog. Если открыть OpenDialog и выбрать какой-либо файл, кнопка перестает выполнять прописанный к ней код.

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

Код
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();
}
WoodooMan
а обработчик какой кнопки перестает работать, а ты трассировал код, что там творится...
amdk6
Button2Click, еще не понятно почему любой другой код, например

Код
void __fastcall TForm1::Button2Click(TObject *Sender)
{
        Edit1->Clear();
}

, работает нормально, а как дело заходит про запись в файл то отказывается.
WoodooMan
погоди, т.е. если ты записываешь имя файла в эдит, у тебя перестает писать данные в файл? они по идее никак не связаны...
etc
Ошибка в 17 строке.
amdk6
Цитата(WoodooMan @ 23:06:2008, 11:45 ) *
погоди, т.е. если ты записываешь имя файла в эдит, у тебя перестает писать данные в файл? они по идее никак не связаны...

Вот именно. Идея такая - выбираю файл через OpenDialog, а путь что появится в TEdit-е надо записать в файл. Если пишу вручную в TEdit все работает, а если выбираю файл через opendialog, уже не хочет. Я сам не вижу связи между ними, думал ошибка в моей проге, специально создал просто 1 поле TEdit, 2 кнопки и OpenDialog... тоже самое. Есть конечно вариант писать файл через указатель, как в Си, но все-таки хочю разобраться почему конфликтует с потоками.
etc
Цитата(amdk6 @ 23:06:2008 - 12:21) *
Вот именно. Идея такая - выбираю файл через OpenDialog, а путь что появится в TEdit-е надо записать в файл. Если пишу вручную в TEdit все работает, а если выбираю файл через opendialog, уже не хочет. Я сам не вижу связи между ними, думал ошибка в моей проге, специально создал просто 1 поле TEdit, 2 кнопки и OpenDialog... тоже самое. Есть конечно вариант писать файл через указатель, как в Си, но все-таки хочю разобраться почему конфликтует с потоками.
Эх ... какой поток сознания, прелесть, залюбуешься ... жаль, что все бестолку ... sad.gif
amdk6
Цитата(etc @ 23:06:2008, 12:55 ) *
Эх ... какой поток сознания, прелесть, залюбуешься ... жаль, что все бестолку ... sad.gif

К чему всю эту чюшь писать? Ты видимо такой всезнайка, из-за таких как ты форумы и пустеют. Видимо ты 222 поста только чюшью и набрал... Продуктивно товарисчь.
etc
amdk6 Форумы "пустеют" от нехватки нормальных вопросов. Открытие для вас? уже 223
amdk6
Чем мой вопрос плох? Конкретно. Если ты думаешь что я примиком свалил сюда и написал, без того чтобы потыкать твой любимый F1 или поискать в гугле то глубоко ошибаешся.
etc
Поиск - уже не плохо.
Цитата(amdk6 @ 23:06:2008 - 13:17) *
Чем мой вопрос плох?
Дык, раньше указал - см. #5, ну и конечно - http://linuxmafia.com/faq/Essays/smart-questions.html
Я вот ваш код скопировал, откомпилировал - работает, так и где проблема?
amdk6
Разобрался, с флудом пополам.
etc
Цитата(amdk6 @ 23:06:2008 - 13:59) *
Разобрался, с флудом пополам
Ну так не флудите а расскажите в чем прикол-то был.
amdk6
Файл создается, только щас случайно заметил, но не возле *.ехе-шки, а в той директории откуда был выбран файл через OpenDialog. (Такой феномен, уж извините, нигде не расписан).
etc
smile.gif F1 - OpenDialog1->Options = OpenDialog1->Options + [ofNoChangeDir]; и живите спокойно.
но,
Цитата(amdk6 @ 22:06:2008 - 17:53) *
Если открыть OpenDialog и выбрать какой-либо файл, кнопка перестает выполнять прописанный к ней код.

<>
Цитата(amdk6 @ 23:06:2008 - 14:10) *
Файл создается, только щас случайно заметил, но не возле *.ехе-шки

Это к вопросу про чушь. smile.gif
ладно. без обид, приходите еще сюда, поможем wink.gif
amdk6
Спасибо за поддержку.
EugenOS
Это не феномен - меняется текущая директоря для данного приложения.

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

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


теперь к имени файла добавляем appPath и проблемы нет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2008 IPS, Inc.