• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Opendialog и Ofstream

  • Автор темы amdk6
  • Дата начала
A

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();
}
 
W

WoodooMan

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

amdk6

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

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

WoodooMan

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

amdk6

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

etc

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

amdk6

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

etc

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

amdk6

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

amdk6

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

etc

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

EugenOS

Это не феномен - меняется текущая директоря для данного приложения.

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

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

теперь к имени файла добавляем appPath и проблемы нет.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!