Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.06.2015, 10:01
vivid vivid вне форума
Прохожий
 
Регистрация: 03.06.2015
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Копирование файла с флешки

Есть флешка с данными но она отпадает каждые 3-5 секунды и пере подключается, нужно скопировать файл
Код:
procedure TForm1.Button1Click(Sender: TObject);

const masRaz = 524288; 

var sizeF: Int64; 
    sizeFcol: Int64; 
    F, G: File;
    NameFileF, NameFileG: string;
    B: array [1..masRaz] of byte; 
    i: integer; 
    x: boolean; 
    count: integer; 
    sizeFEnd: integer; 


function GetFileSizeAPI(const FileName: string): Int64;    
var
  FindData: TWin32FindData;
  hFind: THandle;
begin
  Result := -1;
  hFind := FindFirstFile( PChar(FileName), FindData );
  if hFind <> INVALID_HANDLE_VALUE then
  begin
    try
      Windows.FindClose(hFind);
      if ( FindData.dwFileAttributes
           and
           FILE_ATTRIBUTE_DIRECTORY) = 0 then
        Result := FindData.nFileSizeLow;
    except
      Result := -1;
    end;
  end;
end;



begin
  NameFileF:= 'F:\P1000001.JPG';
  NameFileG:= 'C:\out.txt';

  AssignFile(F, NameFileF);
  AssignFile(G, NameFileG);
  Rewrite(G, masRaz);
  sizeF:= 0;
  while sizeF <= 0 do
  begin
    sizeF:= GetFileSizeAPI(NameFileF);
    sizeFcol:= sizeF div masRaz;
    sizeFEnd:= sizeF - sizeFcol * masRaz;
  end;
  for i:= 0 to sizeFcol {- 1} do
  begin
    x:= false;
    while not x do
    begin
      Try
        FillChar(B, SizeOf(B), 0);
        Reset(F, masRaz);
        seek(F, i);
        BlockRead(F, B, 1, count);
        CloseFile(F);
        if i <> sizeFcol then
        begin
          seek(G, i);
          BlockWrite(G, B, 1);
        end
          else begin
            CloseFile(G);
            FileMode:= fmOpenWrite;
            Reset(G, 1);
            Seek(G, (sizeF - sizeFEnd));
            BlockWrite(G, B, sizeFEnd);
          end;
        x:= true;
      Except
        x:= false;
      end;
    end;
  end;
  CloseFile(G);
end;
Код рабочий, может кому пригодиться

Последний раз редактировалось vivid, 04.06.2015 в 17:13.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter