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

Вниз

Впорос с одного зарубежного форума (copy open file)   Найти похожие ветки 

 
Igor_thief   (2005-06-26 15:26) [0]

Вопрос звучал таким образом: Functions that can copy an open file in its entirety, or stream data from a open file. С первой частью я справился таким образом:
procedure TForm1.Button1Click(Sender: TObject);
var
 fs, fsOut: TFileStream;
 Buffer: array [1..300] of byte;
 c: integer;
begin
 if OpenDialog1.Execute then
   begin
     fs := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
     fsOut := TFileStream.Create(OpenDialog1.FileName + ".out", fmCreate);
     try
     fs.Seek(0, soFromBeginning);
     while fs.Position <> fs.Size do
       begin
         c := fs.Read(Buffer, 300);
         fsOut.Write(Buffer, c);
         FillChar(Buffer, 300, 0);
       end;
     finally
       fs.Free;
       fsOut.Free;
     end;
   end;
end;


А что автор имел ввиду во второй части (после запятой)? Объясните пожалуйста (если можно, то с примером).


 
uny ©   (2005-06-26 16:00) [1]

чуть другая реализация - читает всё кроме *.swp

function File_s(N: string
var
FileHandle: THandle;
MapHandle: THandle;
ViewPointer: pointer;
begin
FileHandle := CreateFile(pChar(N), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,
 nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_SEQUENTIAL_SCAN, 0);
if FileHandle <> INVALID_HANDLE_VALUE then try
 MapHandle := CreateFileMapping(FileHandle, nil, PAGE_READONLY, 0, 0, nil);
 if MapHandle <> 0 then try
  ViewPointer := MapViewOfFile(MapHandle, FILE_MAP_READ, 0, 0, 0);
  if ViewPointer <> nil then try
{тут действия с файлом через ViewPointer, GetFileSize(FileHandle, nil) его размер}
  finally
   UnmapViewOfFile(ViewPointer);
  end;
 finally
  CloseHandle(MapHandle);
 end;
finally
 CloseHandle(FileHandle);
end;
end;


 
Igor_thief   (2005-06-26 16:02) [2]

uny ©   (26.06.05 16:00) [1]
Тоже вариант, но а что по-поводу "or stream data from a open file"?


 
uny ©   (2005-06-26 16:04) [3]

[2] Igor_thief   (26.06.05 16:02)
я могу ошибаться, но приведённый пример из модуля расчёта md5 для файлов. файлы могут быть очень большими и в память не поместятся. может этот пример как раз и читает их потоками...


 
P.N.P. ©   (2005-06-26 16:16) [4]

Дословно вопрос переводится как
Функции, которые могут скопировать открытый файл в своей папке или поточные данные из открытого файла
Как-то странно звучит...
Может имеется ввиду доступ к файлу, уже открытому другим приложением, которое не дает прав для чтения остальным?


 
Eraser ©   (2005-06-26 16:28) [5]

P.N.P. ©   (26.06.05 16:16) [4]

имхо здесь stream не существительное, а глагол.


 
Eraser ©   (2005-06-26 16:30) [6]

оба варината решаются простым созданием TFileStream с параметром fmOpenRead.



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

Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.042 c
14-1119966914
pavel_guzhanov
2005-06-28 17:55
2005.07.18
Что такое система контроля версий?


3-1117708737
Harry7
2005-06-02 14:38
2005.07.18
Напоминалка для Дней Рождения


8-1111596976
BAK
2005-03-23 19:56
2005.07.18
Какие возможности в Delphi работы со звуком?


3-1117991302
dim2002
2005-06-05 21:08
2005.07.18
Сортировка в ADO


14-1119547570
Olivka
2005-06-23 21:26
2005.07.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский