Форум: "Начинающим";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
ВнизУдаление файла Найти похожие ветки
← →
Не молодой (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.015 c