Главная страница
    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.012 c
4-1129552219
ПЛОВ
2005-10-17 16:30
2005.12.18
Скорости, напряжения, температуры


2-1133273255
бедный студент
2005-11-29 17:07
2005.12.18
шаг цикла


1-1132773228
pound
2005-11-23 22:13
2005.12.18
Как нормально прекратить работу потока


4-1127981652
BaxTMaH
2005-09-29 12:14
2005.12.18
Русский язык


4-1129468904
Ilg
2005-10-16 17:21
2005.12.18
Отключение системного меню





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский