Главная страница
    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.028 c
6-1113373266
Slym
2005-04-13 10:21
2005.07.18
Формат GZip где я не прав?


14-1119955038
Ega23
2005-06-28 14:37
2005.07.18
Задачка для мозгов


4-1116699894
Volume
2005-05-21 22:24
2005.07.18
Task Manager


1-1120122756
LLlMblra
2005-06-30 13:12
2005.07.18
Определение позиции курсора относительно экрана


14-1118838566
Поручик
2005-06-15 16:29
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский