Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
lexus3d_(1)   (2005-05-05 08:47) [0]

Вопрос возник неожиданно и незванно, но тем не менее прошу подсказать как можно решить данную проблемму:
- создаю файл (неважно какой просто создаю);затем пытаюсь этот файл зажать при помощи компонента, но перед этим стоит условие на проверку существования файла (файл существует! проверка проходит на ура!) но архив не создаёться поскольку файл то оказываеться занятым моим собственным приложением, так вот как мне освободить файл, что бы вновь на него сослаться!


 
KilkennyCat ©   (2005-05-05 08:54) [1]

как проверяется? после создания есть где-нить closefile() ?


 
lexus3d ©   (2005-05-05 09:00) [2]

конечно .. файл создал поработал с ним и закрыл. я это отдельно в функции вынесь .. мне так нужно ... файл создаёться! я даже прочитать из него могу! А вот удалить не могу, поскольку он занят моим приложение.


 
dmitry501 ©   (2005-05-05 09:41) [3]

lexus3d_(1)   (05.05.05 8:47)
Приведите кусочки из программы где файл создается, закрывается и сжимается...


 
lexus3d ©   (2005-05-05 09:57) [4]

procedure PakToFile(pName: PChar);
      //pFile - путь до файлов которые будут сливаться!
      //fName - имя файла который будет заливаться в общий файл
      //pName - путь/имя файла который должен получиться после сливания
var tFiles,lFile: File;
   fSize,i,j,xSize: integer;
   cCh:array [0..1023] of Byte;//Char;
   NumRead, NumWritten: Integer;
   fName,sName: String;
begin
if  FileExists(pName) then DeleteFile(pName);
for i:=0 to List.Count-1 do
 begin
    fName:=List.Strings[i];

    AssignFile(lFile,pName);
    if not FileExists(pName) then
      ReWrite(lFile,1)
    else
      Reset(lFile,1);

     AssignFile(tFiles,pFile+fName);
     Reset(tFiles,1);

    fSize:=Filesize(lFile);
    if fSize<>0 then  Seek(lFile,fSize);
//------------------------------------------------------------------------------>
    sName:=inttostr(Length(fName));    //опред.длину названия фыйла
    xSize:=byte(Length(sName));        //из скольки символов состоит число "длинны" файла
    sName:=numSize(xSize,sName);       //получаем конечный результат: "001" или "021" или "215"

    for j:=1 to 3 do                                       //записываем размер имени файлы
    BlockWrite(lFile,sName[j],SizeOf(sName[j]),NumWritten);

    for j:=1 to length(fName)do                            //записываем имя файла
     BlockWrite(lFile,fName[j],1,NumWritten);
//------------------------------------------------------------------------------>
    fSize:=Filesize(tFiles);                     //определяем размер файла пере-
    sName:=inttostr(Length(IntToStr(fSize)));    //водим его в символьное выра-
    xSize:=byte(Length(sName));                  //жение для записи в конечный
    sName:=numSize(xSize,sName);                 //файл.

    for j:=1 to 3 do
    BlockWrite(lFile,sName[j],SizeOf(sName[j]),NumWritten);

    sName:=inttostr(fSize);
    xSize:=Length(sName);
    for j:=1 to xSize do
    BlockWrite(lFile,sName[j],SizeOf(sName[j]),NumWritten);
//------------------------------------------------------------------------------>
repeat
    BlockRead(tFiles,cCh,SizeOf(cCh),NumRead);   //сам процесс соединения фалов в один
    BlockWrite(lFile,cCh,NumRead,NumWritten);    //
until (NumRead = 0) or (NumWritten <> NumRead);
    CloseFile(tFiles);
end;
    FileMOde:=0;
    CloseFile(lFile);

end;
.....
//упаковка  идёт через компонент
pZip:=ExtractFilePath(ParamStr(0))+"1.plp";
if  FileExists (pZip) then
begin
Zip1.CreateArchive(Edit1.Text);
Zip1.AddFile(pZip);
Zip1.CloseArchive;
ShowMessage("Скин готов!");
end
else
ShowMessage("Файла для скина не существует!!!");
end;

ну вот вырезки из кода .. procedure"a работает на "ура" проверенно... просто файл к которому я обращаюсь для архивации являеться занятым.


 
alpet ©   (2005-05-05 10:14) [5]

Догадайся что дает строка:

pZip:=ExtractFilePath(ParamStr(0))+"1.plp";

правильный ответ - "program.exe1.plp", где program - имя исполняемого файла твоей проги. Учись использовать отладчик и окно watch - помогает.


 
alpet ©   (2005-05-05 10:15) [6]

хотя нет сейчас сам проверю.


 
lexus3d ©   (2005-05-05 10:21) [7]


> alpet ©   (05.05.05 10:15) [6]
> хотя нет сейчас сам проверю.

вот вот ..проверька ... всё правельно она возвращает!


 
alpet ©   (2005-05-05 10:27) [8]

2 ошибки пока нашел.
1. У меня не вызов  AssignFile(lFile, pName) приводил к исключению, заменил на  AssignFile(lFile, ".\" + pName);
2. Эта самая функция открывает файл несколько раз поскольку находится в теле цикла вместе Reset / ReWrite, тогда как CloseFile вне цикла. Это и дает ошибку доступа к файлу.


 
alpet ©   (2005-05-05 10:29) [9]

Вынес из цикла AssignFile - все заработало, хотя не смотрел как это  повлияло на процесс упаковки.


 
lexus3d ©   (2005-05-05 12:30) [10]

2alpet

большущее спасибо ... сам виноват как раз там и были ошибки, убрал из цикла и всё нормально заработало.

спасибо что ткнул носом ... буду внимательнее!



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

Форум: "WinAPI";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.066 c
3-1116318431
atruhin
2005-05-17 12:27
2005.06.29
Как подсчитать кол-во уникальных значений поля с учетом NULL


1-1118071657
Петя
2005-06-06 19:27
2005.06.29
можноли создать наделфи функцию у которой неизвусное число параме


14-1117970147
Juice
2005-06-05 15:15
2005.06.29
Глючит проводник. Что делать ?


4-1114862396
Новичек
2005-04-30 15:59
2005.06.29
Рисование с помощью API.


1-1117740974
Slawutich
2005-06-02 23:36
2005.06.29
Можно ли както сохранить картинку в переменную





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