Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.12.2009, 20:43
Ztrel Ztrel вне форума
Прохожий
 
Регистрация: 10.08.2009
Сообщения: 25
Репутация: 10
Сообщение Работа с текстовым файлом - опять

Здравствуйте, уважаемые.
У меня вопрос...

Как:
1) Сперва открыть файл на чтение
2) Считать из него некоторые данные
3) Потом изменить эти данные
4) Потом переписать файл с новыми данными ( то есть изменены лишь пара строк из 30, предположим)
5) Потом проверить этот файл на некоторое наличие строк (например на 38)
6) В конце добавить в этот файл какую-нибудь строчку, в зависимости от количества строк.

Очень надо, ребят... Пожалуйста, помогите. Уже несколько дней работа стоит...
Ответить с цитированием
  #2  
Старый 01.12.2009, 21:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,095
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А какой файл-то?
Текстовый или бинарный?
И какими средствами можно пользоваться? Любыми?
Если текстовый и средства любые - пользуй TStringList. Удобно и просто.
Ответить с цитированием
  #3  
Старый 01.12.2009, 23:00
Ztrel Ztrel вне форума
Прохожий
 
Регистрация: 10.08.2009
Сообщения: 25
Репутация: 10
По умолчанию

Приведите пример пожалуйста...
Да - файл текстовый. Да, можно пользоваться TStringList.

Есть одно Но.

По идее, следующий код должен работать...

Код:
If (Form1.Edit1.Text = '' ) then 
filename:= 'Блаблабла.txt' 
else
filename:= 'Блаблабла1.txt';

tmp:= TStringList.Create;

AssignFile(F, filename);
Reset(F);
while not eof(F) do
begin
readln(F, str);
tmp.Add(str);
end;
CloseFile(F);

osenka:= tmp[4];
obkoltests:= StrToInt(tmp[5]);

obkoltests:= obkoltests + 1;
osenka:= 'Отлично';

tmp[4]:= osenka;
tmp[5]:= IntToStr(obkoltests);

AssignFile(F, filename);
Rewrite(F);
for k:= 0 to (tmp.Count - 1) do
begin
writeln(F, tmp[k]);
inc(k);
end;
CloseFile(F);

if 38 > tmp.Count then
begin
AssignFile(F, filename);
Append(F);
writeln(F, '*******');
CloseFile(F);
end
else
begin
AssignFile(F, filename);
Append(F);
writeln(F, '****');
writeln(F, obkoltests);
CloseFile(F);
end;

Но он не работает. Останавливается на строчке Rewrite(F);

Пишет:

EInOutFile with message I/O error 32,

если файл не скрытый, а ежели он скрыт, то

File access denied

Помогите!
Ответить с цитированием
  #4  
Старый 01.12.2009, 23:10
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Ошибка такая..."процесс не может получить доступ к файлу, так как этот файл занят другим процессом"...это покажет сообщение ShowMessage(SysErrorMessage(32))...
Код:
begin
  AssignFile(f , FileName);
  ReWrite(f);
  ShowMessage(SysErrorMessage(32));
  CloseFile(f);
end;
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #5  
Старый 01.12.2009, 23:14
Ztrel Ztrel вне форума
Прохожий
 
Регистрация: 10.08.2009
Сообщения: 25
Репутация: 10
По умолчанию

Эмм... Ну да. А что это дает? Я не понимаю... Объясни пожалуйста...
Ответить с цитированием
  #6  
Старый 01.12.2009, 23:30
Ztrel Ztrel вне форума
Прохожий
 
Регистрация: 10.08.2009
Сообщения: 25
Репутация: 10
По умолчанию

Вся проблема в том, что должно ведь выполняться переписывание файла, но оно не происходит из-за этой ошибки... Как ее можно исключить-исправить?
Ответить с цитированием
  #7  
Старый 01.12.2009, 23:47
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

У вас права на изменение этого файла есть?
В каталог, где находится файл вы можете копировать?
Вы случаем не открыли сторонней программой этот файл?
У вас не подвисало приложение которое обращается к этому файлу?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #8  
Старый 02.12.2009, 17:53
Ztrel Ztrel вне форума
Прохожий
 
Регистрация: 10.08.2009
Сообщения: 25
Репутация: 10
По умолчанию

Имею. Могу. Не открывал.
Насчет подвисания... У меня вылетает ошибка - а что с нею делать... Пишет что файл занят другим процессом... Но я ведь закрыл этот файл!

Может попробовать связать этот файл с другой файловой переменной?
Хотя нет, это я уже пробовал...
А, кажется понял. Надо переписать файл в TStringList, потом удалить файл с которого считывали, заново его переписать... Или не сработает?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:13.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025