Главная страница
    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.046 c
14-1117631062
Иксик
2005-06-01 17:04
2005.07.18
Михаил Ходорковский


3-1117516389
kyn66
2005-05-31 09:13
2005.07.18
Ввод непечатаемых символов в строку пароля БД


14-1120030901
kot andrei
2005-06-29 11:41
2005.07.18
Чем чревато большое количествоглобальных переменных в проекте?


1-1120137772
and
2005-06-30 17:22
2005.07.18
Трассировка только своих модулей


3-1118267577
highlander
2005-06-09 01:52
2005.07.18
Работа с БД Firebird, Interbase в Делфи





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