Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.016 c
4-1129487692
Швч
2005-10-16 22:34
2005.12.18
Как вставить рисунок JPG на фон ListView


2-1133523364
cor@l
2005-12-02 14:36
2005.12.18
ComboBox


14-1132723077
Иксик
2005-11-23 08:17
2005.12.18
Бдите


2-1133328961
Laymer
2005-11-30 08:36
2005.12.18
TSQLConnection


14-1133098896
Alexis
2005-11-27 16:41
2005.12.18
На borland.com только Delphi 2005 .NET?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский