Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > OpenDialog как сбросить


Автор: Voronin_Igor 28.6.2010, 21:17
Добрые люди! Проблема вот в чем:

Программа с помощью OpenDialog берет адрес файла (неважно какого) и сохраняет его в другой.
Но возникает проблема после использования OpenDialog она не может открыть другой файл.
если убрать OpenDialog все работает или сохранить файл с помощью SaveDialog все работает
вот код:
Код

AnsiString SBaz;
if (OpenDialog1->Execute())
    {
    SBaz=OpenDialog1->FileName;
    Form5->OpenDialog1->Free();
    }
    
Memo1->Lines->Clear();
Memo1->Lines->Add(SBaz);
Memo1->Lines->SaveToFile("C:\text.txt" );


пишет что не может создать файл.
такое ощущение что после диалога с другими файлами невозможно работать
как сбросить диалог? smile  
или как можно это заставить работать

Автор: Voronin_Igor 28.6.2010, 21:38
вот так работает:

Код

AnsiString SBaz;
if (OpenDialog1->Execute())
    {
    SBaz=OpenDialog1->FileName;
    Form5->OpenDialog1->Free();
    }
    
Memo1->Lines->Clear();
Memo1->Lines->Add(SBaz);
if (SaveDialog1->Execute())
    {
    Memo1->Lines->SaveToFile(SaveDialog1->FileName);
    }
    

Автор: ИванМ 28.6.2010, 21:46
замени
Цитата(Voronin_Igor @  28.6.2010,  21:17 Найти цитируемый пост)
Memo1->Lines->SaveToFile("C:\text.txt" );

на
Код

Memo1->Lines->SaveToFile("C:\\text.txt" );

Автор: Voronin_Igor 28.6.2010, 22:20
Цитата(ИванМ @  28.6.2010,  19:46 Найти цитируемый пост)
Memo1->Lines->SaveToFile("C:\\text.txt" );
 
не так не получится адрес я выдуманный написал в нем ошибки нет если убрать OpenDialog то все работает

Автор: ИванМ 28.6.2010, 22:24
Цитата(Voronin_Igor @  28.6.2010,  21:38 Найти цитируемый пост)
Form5->OpenDialog1->Free();

Эта строчка вообще не нужна. Нужна только если вы создаете OpenDialog динамически.

Автор: Данкинг 28.6.2010, 23:27
Цитата(Voronin_Igor @  28.6.2010,  22:17 Найти цитируемый пост)
пишет что не может создать файл.

На каком месте, на сохранении? А Free действительно не нужно, странно, как на этом место ошибка не вылезает.

Автор: Voronin_Igor 29.6.2010, 06:49
Цитата(Данкинг @  28.6.2010,  21:27 Найти цитируемый пост)
На каком месте, на сохранении? 


ошибка появляется при попытке сохранения Memo1->Lines->SaveToFile("C:\\text.txt" );
пишет что не может создать файл, а по поводу Form5->OpenDialog1->Free(); это от безысходности  
 smile 

Автор: Данкинг 29.6.2010, 10:19
Цитата(Voronin_Igor @  29.6.2010,  07:49 Найти цитируемый пост)
ошибка появляется при попытке сохранения Memo1->Lines->SaveToFile("C:\\text.txt" );

Ну, OD тут ни при чём определённо. Ищи косяк в другом. smile 

Автор: mrbrooks 29.6.2010, 10:56
Цитата(Voronin_Igor @  29.6.2010,  07:49 Найти цитируемый пост)
ошибка появляется при попытке сохранения Memo1->Lines->SaveToFile("C:\\text.txt" );

ололо. показывай весь код. может у тебя диска C нет? smile ты точно с этим путем сохраняешь?


Цитата(Voronin_Igor @  29.6.2010,  07:49 Найти цитируемый пост)
Form5->OpenDialog1->Free();

улыбнуло. даже при динамическом создание контрола так не делают. мы же не дельфятники.

Автор: xvr 29.6.2010, 11:13
OpenDialog может сменить текущую директорию для процесса. Если у вас в SaveToFile прописан не полный путь (а судя по вашему комментарию 'адрес я выдуманный написал' - что там реально написано мы не знаем), то может и не сохраниться.

Автор: Voronin_Igor 29.6.2010, 16:02
Повторюсь Адрес тут не причем 

Код

AnsiString SBaz;
SBaz="Любая строка";    
Memo1->Lines->Clear();
Memo1->Lines->Add(SBaz);
Memo1->Lines->SaveToFile("temp/text.txt" );

Работает


Код

AnsiString SBaz;
Memo1->Lines->Clear();
Memo1->Lines->LoadFromFile("temp/text.txt");
SBaz=Memo1->Lines->GetText();
if (OpenDialog1->Execute())
    {
    SBaz+=OpenDialog1->FileName;

    }
    
Memo1->Lines->Clear();
Memo1->Lines->Add(SBaz);           
Memo1->Lines->SaveToFile("C:\text.txt" );   //работает до этого места


более того

Код

AnsiString SBaz;
Memo1->Lines->Clear();

if (OpenDialog1->Execute())
    {
    SBaz+=OpenDialog1->FileName;

    }
                                                        
Memo1->Lines->LoadFromFile("temp/text.txt"); // теперь здесь ошибка
SBaz=Memo1->Lines->GetText();

    
Memo1->Lines->Clear();
Memo1->Lines->Add(SBaz);             
Memo1->Lines->SaveToFile("C:\text.txt" );


так что, как мне кажется адрес тут не причем 


Автор: xvr 29.6.2010, 17:14
Цитата(Voronin_Igor @ 29.6.2010,  16:02)
Повторюсь Адрес тут не причем 

Как раз 'причем'. У тебя там по ошибке в каждой строке  smile 

Цитата

Код

Memo1->Lines->SaveToFile("C:\text.txt" );   //работает до этого места


Еще бы, нельзя символ табуляции засовывать в имя файла  smile 
Код

Memo1->Lines->SaveToFile("C:\\text.txt" );   //надо так


Цитата

более того
Код

AnsiString SBaz;
Memo1->Lines->Clear();

if (OpenDialog1->Execute())
    {
    SBaz+=OpenDialog1->FileName;

    }
                                                        
Memo1->Lines->LoadFromFile("temp/text.txt"); // теперь здесь ошибка

У тебя есть папка temp РЯДОМ с файлом, который ты пытаешься открыть? А файл text.txt в этой папке есть?

Автор: Voronin_Igor 29.6.2010, 18:51
Цитата(xvr @  29.6.2010,  15:14 Найти цитируемый пост)
У тебя есть папка temp РЯДОМ с файлом, который ты пытаешься открыть? А файл text.txt в этой папке есть?

Да конечно 
все работает пока нет OpenDialog

Автор: Voronin_Igor 29.6.2010, 21:09
люди проверьте пожалуйста у себя в builder e этот код 

Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString SBaz;
RichEdit1->Lines->Clear();
RichEdit1->Lines->LoadFromFile("Base/zad.txt");
SBaz=RichEdit1->Lines->GetText();

if (OpenDialog1->Execute())
    RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName) ;
    RichEdit1->Lines->SaveToFile("Base/zad.txt");

}

есть подозрения что мой builder глючит
в каталоге с программой нужно создать папку Base а в ней файл zad.txt c любым текстом
заранее благодарен!!!

Автор: xvr 29.6.2010, 22:35
Цитата(Voronin_Igor @  29.6.2010,  21:09 Найти цитируемый пост)
люди проверьте пожалуйста у себя в builder e этот код 
BCB 6.0 Все работает (если не пытаться открывать файл оттуда, откуда он это предлагает сделать сначала - из 'Моих Документов'. Оттуда работать не будет)

Цитата(Voronin_Igor @  29.6.2010,  21:09 Найти цитируемый пост)
есть подозрения что мой builder глючит
Это вряд ли  smile 
Поставь в опциях OpenDialog1: Options->ofNoChangeDir в true


Автор: Voronin_Igor 29.6.2010, 23:43
Цитата(xvr @  29.6.2010,  20:35 Найти цитируемый пост)
Поставь в опциях OpenDialog1: Options->ofNoChangeDir в true


без изменений хрень какая то((( 



Автор: Usper 30.6.2010, 07:52
Выложи свой проект или сделай новый в котором проявляется проблема.

Автор: mrbrooks 30.6.2010, 08:37
Цитата(Voronin_Igor @  29.6.2010,  22:09 Найти цитируемый пост)
в каталоге с программой нужно создать папку Base а в ней файл zad.txt c любым текстом

метод RichEdit1->Lines->SaveToFile() не создает папки. Читайте документацию. 
Что бы создать папку используйте CreateDir.
т.е. типа этого:
Код

String path = ExtractFilePath(Application->ExeName) + "Base";
if(CreateDir(path)) RichEdit1->Lines->SaveToFile(path + "\\zad.txt");


Добавлено через 41 секунду
Цитата(Voronin_Igor @  30.6.2010,  00:43 Найти цитируемый пост)
без изменений хрень какая то((( 

RTFM

Автор: Voronin_Igor 30.6.2010, 11:58
Цитата(xvr @  29.6.2010,  20:35 Найти цитируемый пост)
Поставь в опциях OpenDialog1: Options->ofNoChangeDir в true

непомогло

Автор: mrbrooks 1.7.2010, 08:01
smile

Автор: ИванМ 4.7.2010, 21:58
Voronin_Igor, если вы задаете какие-то вопросы и хотите получить ответ, то я бы вам посоветовал хотя бы адекватно реагировать на все советы.

Автор: Voronin_Igor 10.7.2010, 11:24
Разобрался, всем спасибо кто участвовал.
На самом деле после OpenDialog нужно писать полный адрес а не сокращенный 
вот и вся беда  smile 

Автор: Данкинг 10.7.2010, 12:11
Цитата(Voronin_Igor @  10.7.2010,  12:24 Найти цитируемый пост)
На самом деле после OpenDialog нужно писать полный адрес а не сокращенный 

Ну так вроде mrbrooks об этом и писал. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)