
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.90] |
![]() |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
![]() |
Сообщ.
#1
,
|
|
Процедура для показа списка пользователей/создания нового пользователя/чтения данных конкретного пользователея.
![]() ![]() Type TUser = Record Name:String[100]; Password:String[100]; End; var F:File of TUser; User:TUser; I,I1:Word; Procedure UserProc(D:Byte;D2:Byte);{D - 1-show 2-add 3-read, D2 - Номер пользователя} Var Size:Word; S:String; Begin AssignFile(F,Form1.CurDir+'User.ini'); {$I-} Reset(F); If IOResult<>0 then Rewrite(F); {$I+} Size:=FileSize(F); Case D of 1:Begin While Not Eof(F) do Begin Read(F,User); Form2.ListBox1.Items.Add(User.Name); Form4.ListBox1.Items.Add(User.Name); End; End; 2:Begin S:=InputBox('Введите имя нового пользователя:','',''); If S<>'' Then If not DirectoryExists(Form1.CurDir+S) Then Begin User.Name:=S; S:=InputBox('Введите пароль:','',''); If S<>'' Then Begin User.Password:=S; Seek(F,Size); Write(F,User);//File Access Denied!!! MkDir(Form1.CurDir+User.Name); Form1.UserDir:=User.Name; End; End Else ShowMessage('Пользователь уже существует'); End; 3:Begin Seek(F,D2); Read(F,User); End; End;{case} CloseFile(F); End; Если мы вызываем данную процедуру для создания пользователя неограниченное кол-во раз, все работает( UserProc(2,0) ) Стоит только прозвести чтение(UserProcD(3,1) ) и затем снова создание UserProc(2,0), как вываливается Write(F,User);//File Access Denied!!! Не пойму в чем дело. Файл User.ini не блокирован, я проверял перемещением, в чем ещё может быть дело? Там ещё есть код конечно, но в нем нет операций по работе с файлами |
![]() |
Сообщ.
#2
,
|
|
Подскажите методу как отловить глюк
|
Сообщ.
#3
,
|
|
|
Я не уверен, но может попробовать при Reset и ReWrite указывать размер блока данных.
|
![]() |
Сообщ.
#4
,
|
|
Seek(F,Size);
Seek(F,D2); как-то странно, в одном случае передаёшь размер файла(в байтах), а в другом, номер раписи... |
Сообщ.
#5
,
|
|
|
Цитата Polinom2686 @ попробовать при Reset и ReWrite указывать размер блока данных Для типизированного файла такого понятия нет. |
Сообщ.
#6
,
|
|
|
Цитата Shaggy @ как-то странно, в одном случае передаёшь размер файла(в байтах), а в другом, номер раписи... Для типизированного файла FileSize выдает размер в кол-ве записей, а не в байтах |
![]() |
Сообщ.
#7
,
|
|
Подскажите алгоритм багфикса. IDE Delphi7
|
Сообщ.
#8
,
|
|
|
Для начала попробуй переписать "по человечески"
![]() ![]() ![]() S:=Form1.CurDir+'User.ini'; AssignFile(F,S); if FileExists(S) then Reset(F) else Rewrite(F); try ... finally CloseFile(F); end; |
Сообщ.
#9
,
|
|
|
Скопировал пример, но по указанным действиям, так и не удалось повторить ошибку, все прекрасно читается и пишется в любом порядке. BDS 2006.
|
![]() |
Сообщ.
#10
,
|
|
Выяснои в чем дело. ТОлько не знаю как решить. Помогите советом...
Сократил 1-й код до минимума. ![]() ![]() unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, AdvGlowButton, StdCtrls, AdvSmoothExpanderGroup; type TForm2 = class(TForm) AdvSmoothExpanderGroup1: TAdvSmoothExpanderGroup; AdvGlowButton1: TAdvGlowButton; procedure AdvGlowButton1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; Type TUser = Record Name:String[100]; Password:String[100]; End; var Form2: TForm2; F:File of TUser; User:TUser; implementation uses NxCustomGridControl, Unit1; {$R *.dfm} procedure TForm2.AdvGlowButton1Click(Sender: TObject); begin form1.NextGrid1.LoadFromTextFile(form1.CurDir+'1\table1.tbl'); AssignFile(F,Form1.CurDir+'User.ini'); Reset(F); User.Name:='777'; User.Password:='777'; Write(F,User); CloseFile(F); end; end. Если убрать form1.NextGrid1.LoadFromTextFile(form1.CurDir+'1\table1.tbl'); то все работает. NextGrid1 это известный компонент(тут) Ошибка в атаче. Что с этим можно сделать? Delphi7 Прикреплённый файл ![]() |
Сообщ.
#11
,
|
|
|
Цитата ^D^ima @ reset, а потом write ... Вам не кажется, что тут что-то не так? Reset(F); ... Write(F,User); ![]() |
![]() |
Сообщ.
#12
,
|
|
Если Вам кажется, напишите об этом
![]() |
Сообщ.
#13
,
|
|
|
Проверь значение переменной FileMode, должно быть = 2 = fmOpenReadWrite
(Давно эта мыслЯ крутилась, но ты ж уверял, что больше нет операций с файлами) |
![]() |
Сообщ.
#14
,
|
|
В точку.
![]() Спасибо большое. Операций со своими файлами не было. Я не думал что из-за сторонней процедуры может быть. |
Сообщ.
#15
,
|
|
|
Цитата ^D^ima @ Если Вам кажется, напишите об этом чтобы "прочитать" файл делаем assignfile,reset,read(ln)...,closefile чтобы записать файл делаем assignfile,rewrite,write(ln)...,closefile так? |