Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

Удаление файла   Найти похожие ветки 

 
Не молодой   (2005-12-02 15:48) [0]

Подскажите, что нужно сделать, чтобы можно было удалитть временный файл 1.txt после
Var OutStream: TMemoryStream;
...
OutStream.SaveToFile("1.txt");

....
OutStream.Destroy;
...
AssignFile(Ft, "1.txt");
Reset(Ft);
CloseFile(Ft);
Erase(Ft);

....
Получаю ошибку ввода/вывода IO Error 32.
что еще необходимо освободить (файл занят)?


 
Tonich ©   (2005-12-02 16:03) [1]

DeleteFile() модуль Sysutils


 
gdaujk ©   (2005-12-03 01:14) [2]

>Не молодой   (02.12.05 15:48)

>Получаю ошибку ввода/вывода IO Error 32.

А я почему-то не получаю. Что у тебя вместо "..."? Зачем:

Reset(Ft);
CloseFile(Ft);


, если можно просто:

AssignFile(Ft, "1.txt");
Erase(Ft);


, а лучше [1].

>Tonich ©   (02.12.05 16:03) [1]

>модуль Sysutils

Можно и не SysUtils, а Windows.


 
Не молодой   (2005-12-03 12:10) [3]

Спасибо, собственно, подходит и [1] и [2], только при [1] - возвращает False,
а при [2] - IO Error 32.
Как (чем) освободить файл после OutStream.SaveToFile("1.txt"); ?


 
gdaujk ©   (2005-12-03 14:30) [4]

Не молодой   (03.12.05 12:10) [3]

Приведи конкретный код. У меня ни в одной из ситуаций ошибки не выскакивает.

Как (чем) освободить файл после OutStream.SaveToFile("1.txt");

SaveToFile заключается в конечном счёте в вызове 3-х WinAPI-функций:

CreateFile    (создание файла)
WriteFile     (запись файла)
CloseHandle   (закрытие файла)


т. е. файл в конечном итоге освобождается.


 
Не молодой   (2005-12-03 14:54) [5]

gdaujk ©   (03.12.05 14:30) [4]

InStream := TFileStream.Create("0.txt", fmOpenRead);
OutStream := TMemoryStream.Create;
Repeat
 InStream.ReadBuffer(Xcurr, SizeOf(Xcurr));
 Case RC of
  1:Ycurr:= C;
  2:Ycurr:= D;
 end;
 OutStream.WriteBuffer(Ycurr, SizeOf(Ycurr));
 Xprev:= Xcurr; Yprev:= Ycurr; Aprev:= Acurr; Bprev:= Bcurr;
Until InStream.Position = InStream.Size;
OutStream.SaveToFile("1.txt");
OutStream.Destroy;
InStream.Destroy;
Bool:= DeleteFile(Stemp);

Получаю Bopl:= False (да и файл на диске остается)


 
Не молодой   (2005-12-03 14:58) [6]

Case RC of
 1:Ycurr:= Xcurr+C;
 2:Ycurr:= Xcurr+D;
end;


 
Anatoly Podgoretsky ©   (2005-12-03 15:30) [7]

Не молодой   (03.12.05 14:54) [5]
Видимо файл Stemp занят, ты его сначала закрой.


 
Zeqfreed ©   (2005-12-03 15:32) [8]

Не молодой   (03.12.05 14:54) [5]
Вместо Destroy лучше использовать Free.


 
gdaujk ©   (2005-12-03 16:23) [9]

>Zeqfreed ©   (03.12.05 15:32) [8]

>Вместо Destroy лучше использовать Free.

Точно, а то вдруг один из стримов будет nil :-)

Не молодой   (03.12.05 14:54) [5]

Следующий код у меня работает без сбоев:

procedure TForm1.Button2Click(Sender: TObject);
const
 TempFile = "1.txt";
 C = 1;
 D =2;
var
 InStream: TFileStream;
 OutStream: TMemoryStream;
 Xcurr, Ycurr, Xprev, Yprev, Aprev, Acurr, Bprev, Bcurr: Longword;
 RC: Integer;
 FileDeleted: Boolean;
begin
 InStream := TFileStream.Create("0.txt", fmOpenRead);
 OutStream := TMemoryStream.Create;
 Repeat
   InStream.ReadBuffer(Xcurr, SizeOf(Xcurr));
   //!!!если размер файла "0.txt" не кратен SizeOf(Xcurr), то здесь вылетает ошибка!!!
   Case RC of
     1:Ycurr:= C;
     2:Ycurr:= D;
   end;
   OutStream.WriteBuffer(Ycurr, SizeOf(Ycurr));
   Xprev:= Xcurr; Yprev:= Ycurr; Aprev:= Acurr; Bprev:= Bcurr;
 Until InStream.Position = InStream.Size;
 OutStream.SaveToFile(TempFile);  //(1)
 OutStream.Destroy;
 InStream.Destroy;
 FileDeleted:= DeleteFile(TempFile);   //(2) лучше заменить Bool на FileDeleted
end;


В OutStream.SaveToFile(...) и DeleteFile(...) (строки, помеченные  (1) и (2)) указывай одинаковый файл.

PS: обрати внимание на пометки...



Страницы: 1 вся ветка

Текущий архив: 2005.12.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.044 c
14-1132954799
dior
2005-11-26 00:39
2005.12.18
я не могу написать тест на делфи(((


2-1133437835
s77
2005-12-01 14:50
2005.12.18
создание указателя на объект


1-1132669206
CaptainAlex
2005-11-22 17:20
2005.12.18
Как корректно удалить Frame?


2-1133445304
oleggar
2005-12-01 16:55
2005.12.18
word8


14-1133210265
DillerXX
2005-11-28 23:37
2005.12.18
far