Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 192
от 27.07.2005, 19:50

Администратор:Калашников О.А.
В рассылке:Подписчиков: 225, Экспертов: 34
В номере:Вопросов: 1, Ответов: 7


Вопрос № 23868: Здравствуйте уважаемые эксперты! Это снова пишу я, так как не получил ответа на свой вопрос. Возможно меня не поняли, обьясню на пальцах в чем заключаеться проблема. Мне присылали ответы в которых велась запись в файлы, которые уже существова...

Вопрос № 23.868
Здравствуйте уважаемые эксперты!
Это снова пишу я, так как не получил ответа на свой вопрос. Возможно меня не поняли, обьясню на пальцах в чем заключаеться проблема.
Мне присылали ответы в которых велась запись в файлы, которые уже существовали! Мне же надо, чтобы прога сама создала файл(которого не было раньше!), и вела туда запись без участия пользователя!
Ошибка получаеться одноразовая, т.е. впервые запустив этот листинг, получите "I/O Error 32", сбросив прогу и запустив ее снова на выполнение, все будет работать как надо!
Чтобы снова получить ошибку надо убить появившийся файл и запустить прогу.
В чем причина такого поведения я не понимаю, обьясните если не трудно.
Всем спасибо!

Приложение:

Отправлен: 22.07.2005, 11:16
Вопрос задал: Sourse (статус: Посетитель)
Всего ответов отправлено: 7

Отвечает: Витомский Вадим Викторович
Здравствуйте, Sourse!
А если для создания файла пробовать ReWrite(f) вместо FileCreate
(см. измененый код)

Приложение:

---------
Не все то Windows, что висит!

Ответ отправил: Витомский Вадим Викторович (статус: 2-ой класс)
Отправлен: 22.07.2005, 11:46
Оценка за ответ: 5
Комментарий оценки:
Спасибо, все работает!

Отвечает: sir henry
Здравствуйте, Sourse!
Простите, если обижу Вас, но у меня появились сомнения в Вашей вменяемости. Вам же уже ответили на предыдущий Ваш вопрос, что ошибка в том, что Вы смешиваете два разных метода в работе с файлами. Все ответы были даны в тему и рабочие. Почему Вы их не восприняли, мне совершенно не понятно.
Еще раз извините.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 22.07.2005, 12:07
Оценка за ответ: 5
Комментарий оценки:
Знаете, я не из обидчивых, но после вашего ответа решил доказать прежде всего себе, что у меня "все дома". Набросал код на пустой форме и все....сработало, к моему изумлению:

procedure TForm1.FormCreate(Sender: TObject);
var
f:textfile;
begin
AssignFile(F,'c:TEMPproba.txt');
If Not FileExists('c:TEMPproba.txt') Then
begin
rewrite(f);
end;
append(f);
writeln(f,'bla-bla-bla');
closefile(f);
end;

end.

Очевидно, что проблема не в этом участке кода, так как прога имеет еще один файловый обмен. Спасибо, за раскрытие глаз!

Отвечает: Tsechoev Bagaudin
Здравствуйте, Sourse!
Для начала, избавься от функции FileCreate. У тебя есть чистая паскалевская функция, которая стара как самя язык, но работает безупречно:
var
F: TextFile;
begin
AssignFile(F,'C:myfile.txt');
Reset(F); // новый файл, Rewrite(F) - перезаписать существующий, Append(F) - дописать в конец файла
writeln(F,'строка'); // или write(F,'данные') - записать без символа окончания строки
flash(F); // сохранить данные в файл
CloseFile(F); // закрыть файл
end;
Думаю, понятно.
Удачи!

---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 8-ой класс)
Отправлен: 22.07.2005, 12:11
Оценка за ответ: 5
Комментарий оценки:
Спасибо, за помощь!

Отвечает: streetcat
Здравствуйте, Sourse!
Правильно! filecreate создает и ОТКРЫВАЕТ файл, а ты потом открываешь его append-ом. И вылетает ошибка совместного доступа к файлу. Я сам не раз сталкивался с этой проблемой, не понимая в чем дело. Решение есть: после вызова filecreate закрывай открытый им файл. Че-то типа того:
FileClose(filecreate('abc.txt'));
или как там у тебя:
if not fileexists(form1.Edit1.Text) then FileClose(filecreate(form1.Edit1.Text));
Ответ отправил: streetcat (статус: 8-ой класс)
Отправлен: 22.07.2005, 12:50
Оценка за ответ: 5
Комментарий оценки:
Спасибо, теперь я понял!

Отвечает: VBA
Здравствуйте, Sourse!

If Not FileExist(Edit1.Text) Then
Begin
AssifnFile(F,Edit1.Text);
ReWrite(F); //Создаем новый файл или затираем старый
Write(F,'String');
CloseFile(F);
End;
---------
Неправ вечно юзер, ибо прав всегда Админ!
Ответ отправил: VBA (статус: 5-ый класс)
Отправлен: 22.07.2005, 13:02
Оценка за ответ: 5
Комментарий оценки:
Все верно, спасибо!

Отвечает: Denis Hakimov
Здравствуйте, Sourse!
я точно не помню, но для перезаписи или создания нового файла
используется функция Rewrite(f), где f-файловая переменная.
append() используется с имеющимися текстовыми файлами, т.е. если файла нет вылезет ошибка.
напиши так:

assignfile(f,form1.Edit1.Text);//открываю файловую переменную

rewrite(f);//сбрасываем файл- он пустой;)

closefile(f);

надеюсь помог.
Ответ отправил: Denis Hakimov (статус: 1-ый класс)
Отправлен: 22.07.2005, 16:48
Оценка за ответ: 5
Комментарий оценки:
Спасибо за помощь!

Отвечает: Denisss
Здравствуйте, Sourse!
Зачем Вы вообще используете FileCreate??? Для создания нового файла/перезаписи старого файла существует процедура Rewrite(F);
Если она у Вас выдает ошибку, то надо искать уже где-то ранее: может Вы где-то уже открыли этот файл на чтение?
Например, процедура FileCreate как раз этим и занимается, что создает файл, а затем открывает его на запись и не дает никому в этот файл ничего записывать.
Кроме того, имеет значение то место программы, где Вы пытаетесь производить запись в файл.

Приложение:

Ответ отправил: Denisss (статус: Студент)
Отправлен: 22.07.2005, 19:24
Оценка за ответ: 5
Комментарий оценки:
Спасибо, все работает.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное