Вопрос № 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() используется с имеющимися текстовыми файлами, т.е. если файла нет вылезет ошибка.
напиши так:
Ответ отправил: Denis Hakimov (статус: 1-ый класс)
Отправлен: 22.07.2005, 16:48 Оценка за ответ: 5 Комментарий оценки: Спасибо за помощь!
Отвечает: Denisss
Здравствуйте, Sourse!
Зачем Вы вообще используете FileCreate??? Для создания нового файла/перезаписи старого файла существует процедура Rewrite(F);
Если она у Вас выдает ошибку, то надо искать уже где-то ранее: может Вы где-то уже открыли этот файл на чтение?
Например, процедура FileCreate как раз этим и занимается, что создает файл, а затем открывает его на запись и не дает никому в этот файл ничего записывать.
Кроме того, имеет значение то место программы, где Вы пытаетесь производить запись в файл.
Приложение:
Ответ отправил: Denisss (статус: Студент)
Отправлен: 22.07.2005, 19:24 Оценка за ответ: 5 Комментарий оценки: Спасибо, все работает.