![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте, уважаемые.
У меня вопрос... Как: 1) Сперва открыть файл на чтение 2) Считать из него некоторые данные 3) Потом изменить эти данные 4) Потом переписать файл с новыми данными ( то есть изменены лишь пара строк из 30, предположим) 5) Потом проверить этот файл на некоторое наличие строк (например на 38) 6) В конце добавить в этот файл какую-нибудь строчку, в зависимости от количества строк. Очень надо, ребят... Пожалуйста, помогите. Уже несколько дней работа стоит... |
#2
|
|||
|
|||
![]() А какой файл-то?
Текстовый или бинарный? И какими средствами можно пользоваться? Любыми? Если текстовый и средства любые - пользуй TStringList. Удобно и просто. |
#3
|
|||
|
|||
![]() Приведите пример пожалуйста...
Да - файл текстовый. Да, можно пользоваться 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
|
||||
|
||||
![]() Ошибка такая..."процесс не может получить доступ к файлу, так как этот файл занят другим процессом"...это покажет сообщение ShowMessage(SysErrorMessage(32))...
Код:
begin AssignFile(f , FileName); ReWrite(f); ShowMessage(SysErrorMessage(32)); CloseFile(f); end; В начале был Бит, потом Байт и только потом появилось Слово... |
#5
|
|||
|
|||
![]() Эмм... Ну да. А что это дает? Я не понимаю... Объясни пожалуйста...
|
#6
|
|||
|
|||
![]() Вся проблема в том, что должно ведь выполняться переписывание файла, но оно не происходит из-за этой ошибки... Как ее можно исключить-исправить?
|
#7
|
||||
|
||||
![]() У вас права на изменение этого файла есть?
В каталог, где находится файл вы можете копировать? Вы случаем не открыли сторонней программой этот файл? У вас не подвисало приложение которое обращается к этому файлу? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#8
|
|||
|
|||
![]() Имею. Могу. Не открывал.
Насчет подвисания... У меня вылетает ошибка - а что с нею делать... Пишет что файл занят другим процессом... Но я ведь закрыл этот файл! Может попробовать связать этот файл с другой файловой переменной? Хотя нет, это я уже пробовал... А, кажется понял. Надо переписать файл в TStringList, потом удалить файл с которого считывали, заново его переписать... Или не сработает? |