Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Работа с фаилами


Автор: chelHide 22.4.2006, 09:58
Пацаны, вот хочу сделать пргогу для копирования, удаления и сравния фаилов. Пользуюсь потоком, но 
вот только почему то при копировании одного фаила в директорию, которую я сам выбрал, но  мне Компилятор выдаёт такую вещь:
 картинку с ошибкой можно посмотреть здесь: 
http://stastankist.ucoz.ru/111.bmp
 
{-------Код----------}
Код

Procedure FileCopy(SourceFileName, TargetFileName:TFileName;Gauge:TGauge);
Var
  S,T   : TFileStream;
  SizeOfFiles:Integer;
  SplitFileName:String;
  i:Word;
  Begin
Gauge.Progress:=0;
 S := TFileStream.Create(sourcefilename,fmOpenRead or fmShareDenyNone);
 try
 SplitFileName := ChangeFileExt(SourceFileName, '.'+ FormatFloat('stas', i));
   T := TFileStream.Create(targetfilename, fmCreate or fmShareExclusive);
   try
   if s.Size - s.Position < SizeofFiles then
          SizeofFiles := s.Size - s.Position;
    T.CopyFrom(S, S.Size );
    Gauge.Progress := Round((s.Position / s.Size) * 100);
   finally
   T.Free;
  end;
 finally
  S.Free; 
 end; 
end; 


{-------}
Помогите чем сможите, пацаны! Если можно, то глянте код! smile   

Автор: x77 22.4.2006, 11:36
могу ошибаться, но по-моему, ты просто не являешься администратором на своей машине.  

Автор: vood 22.4.2006, 15:13
а чем тебе шеллапи не нревиться?
















З.Ы. Я вернулся!! 

Автор: ne0n 22.4.2006, 15:39
Е-е-е, а может CopyFile подойдет, зачем лишний раз мучиться? 

Автор: Sunvas 23.4.2006, 00:28
Может просто эту директорию нужно создавать? 

Автор: chelHide 24.4.2006, 15:43
vood
 А я разве сказал, что я имею что-то против ShellApi имею? 
Мне может напротив этот модуль очень даже нравится!
 smile  

Автор: vood 29.4.2006, 09:44
Ну так пользуйся ими они виндовские и ошибок быть недолжно

Добавлено @ 09:45 
В DRKB про них написанно 

Автор: chelHide 30.4.2006, 09:27
А кто-нибудь знает как можмоно отобразить процесс копирования не с потоковым копированием, а с обичным ??? 
Например 
Код

var f:File
Assign(f,'name.txt')
Rewrite(f);
...
  

Автор: Yanis 30.4.2006, 10:00
Цитата(chelHide @  30.4.2006,  09:27 Найти цитируемый пост)
А кто-нибудь знает как можмоно отобразить процесс копирования не с потоковым копированием, а с обичным ??? 

Скорее всего ты копируешь файл сначала считывая часть в буфер, а потом записываешь этот буфер в другой файл. Так вот в процентном соотношении весь объём файла будет 100%; размер буфера в процентах: 
Цитата

(размер буфера в байтах * 100) / размер файла в байтах
При каждой итерации цикла нужно прибавлять к какой-либо переменной размер буфера в процентах, т.к. теоретически уже известно кол-во итераций копирования. Значение переменной и будет процентное отображение состояния копирования.

Ещё один немного изменённый способ. Размер всего файла у тебя 100%, размер файла в который копируешь у тебя и есть текущее положение вещей. Просто нужно высчитать это в процентном отношению к объёму оригинального файла. 
Цитата

сколько скопировано в процентах = (размер скопированого файла в байтах * 100) / размер оригинального файла в байтах

В случае с "паскалевским копированием" при перезаписи файла вторым параметром указываешь, что за одну запись стоит принимать 1 байт файла:
Код

  rewrite(f, 1);
, и теперь размер всего файла в байтах можно получить так:
Код

var
  nFileSize: Integer;
begin
  { ... }
 nFileSize := FileSize(f);
  { ... }
end;


P. S. для тех кто в танке, так и быть напишу код при надобности smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)