Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Глюкии ввода-вывода ReWrite [D7, WinXP]


Страницы:   1 2

mw_Kronos ©   (2009-10-26 10:51:00) 

Есть у меня тип:
type TData = record
     period          :array [0..1, 0..23] of TDateTime;
     text            :array [0..23] of string[255];
     date            :TDateTime;
     count           :integer;
     password        :array [0..23] of string[255];
end;

Есть процедура которая должна писать в файл этот тип:

function THallData.SaveData(dirPath:string):boolean;
var s:string;
   f:file of TData;
begin
s := FormatDateTime('ddmmyyyy',data.date) + '.dat';
{$I-}
SaveData := true;
AssignFile(f, s);
ReWrite(f);
if IOResult = 0 then
 Write(f,data)
else
 SaveData := false;
CloseFile(f);
{$I+}
end;

Проблема в следующем: если файл не существует, то он создается, но запись в него невозможна, IOResult возвращает 103. А если файл уже существует, то запись проходит успешно. В хелпе написано что ReWrite должна создавать и открывать файл для записи при его отсутствии, но реально выдает ошибку. Почему?


Anatoly Podgoretsky   (2009-10-26 12:22:00) [21]

И непонятно, зачем там передается dirPath, наверно не зря.


Anatoly Podgoretsky   (2009-10-26 12:20:00) [22]

> mw_Kronos  (26.10.2009 12:14:08)  [8]

А чего искать, наверно недостаточно прав на папку.


mw_Kronos   (2009-10-26 12:14:00) [23]

у меня RadStudio 2007


Сергей М.   (2009-10-26 12:06:00) [24]

И в "усложненном" тоже работает)


type TData = record
    period          :array [0..1, 0..23] of TDateTime;
    text            :array [0..23] of string[255];
    date            :TDateTime;
    count           :integer;
    password        :array [0..23] of string[255];
end;

var
data: TData;

function SaveData(dirPath:string):boolean;
var
   i: Integer;
   s:string;
  f:file of TData;
begin
{$I-}
AssignFile(f, dirpath);
ReWrite(f);
if IOResult = 0 then
Write(f,data)
else
ShowMessage(IntToStr(IOResult));
CloseFile(f);
{$I+}
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
 SaveData('c:\1.dat')
end;


Плохиш   (2009-10-26 12:03:00) [25]

Приведённый код в BDS2006 работает без проблем, ищите ошибку в неприведённом коде.


mw_Kronos   (2009-10-26 11:49:00) [26]

странно, в упрощенном виде у меня тоже работает


mw_Kronos   (2009-10-26 11:45:00) [27]

а если не упрощать?


Сергей М.   (2009-10-26 11:37:00) [28]

У меня этот чуть упрощенный код успешно работает:

function SaveData(dirPath:string):boolean;
var
   i: Integer;
  f:file of Integer;
begin
{$I-}
AssignFile(f, dirpath);
ReWrite(f);
if IOResult = 0 then
Write(f,i)
else
ShowMessage(IntToStr(IOResult));
CloseFile(f);
{$I+}
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
 SaveData('c:\1.dat')
end;


mw_Kronos   (2009-10-26 11:29:00) [29]

FileMode = 2


Сергей М.   (2009-10-26 11:21:00) [30]

F1 + "FileMode"


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо