Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизGetMem функция Найти похожие ветки
← →
Илья (2004-12-13 16:56) [0]У меня есть код, выполняющий кэшированое копирование массива отдельных файлов. Примерно на 580 цикле копирования возникает Access Violation. Какова моя ошибка?
Вот мой код:
var
CurFileID : INTEGER;
ReadFileName, WriteFileName : STRING;
TotalSize : INTEGER;
ReadFileHandle, WriteFileHandle : INTEGER;
Buffer : POINTER;
TotalBytesCopied, BytesCopied, BytesToCopy : Int64;
begin
BytesToCopy := 10 * 1024 * 1024; //10 MB - buffer size
CurFileID := 0;
while CurFileID < TotalFiles do
begin
//File names
ReadFileName := Array[CurFileId];
WriteFileName := "C:\copyto\"+ReadFileName;
//Checking file for existance
if not FileExists(ReadFileName) then
begin
Inc(CurFileId);
Break;
end;
//Handles
ReadFileHandle := FileOpen(ReadFileName, fmOpenRead);
WriteFileHandle := FileCreate(WriteFileName, fmOpenWrite);
TotalSize := FileSeek(ReadFileHandle, 0, 2);
//Copying all file
TotalBytesCopied := 0;
while TotalBytesCopied < TotalSize do
begin
GetMem(Buffer, BytesToCopy);
//Reading
FileSeek(ReadFileHandle, TotalBytesCopied, 0);
BytesCopied := FileRead(ReadFileHandle, Buffer^, BytesToCopy);
//Writing
FileWrite(WriteFileHandle, Buffer^, BytesCopied);
Inc(TotalBytesCopied, BytesCopied);
Inc(CurFileID);
end;
//Closing files
FileClose(ReadFileHandle);
FileClose(WriteFileHandle);
Dispose(Buffer);
end;
end;
← →
Palladin © (2004-12-13 17:37) [1]А чем CopyFile не устраивает, зачем изобретать велосипед?
← →
Leonid Troyanovsky © (2004-12-13 18:01) [2]
> Илья (13.12.04 16:56)
> У меня есть код, выполняющий кэшированое копирование массива
А в чем глубинный смысл "кэшированного копирования"?
> Access Violation. Какова моя ошибка?
Все просто: ты обращаешся к нераспределенной тобой памяти.
--
С уважением, LVT.
← →
begin...end © (2004-12-13 18:06) [3]> Илья (13.12.04 16:56)
Подозрительно, что у Вас память выделяется в цикле, а освобождается за его пределами (т.е. только последний выделенный кусок памяти).
← →
Илья (2004-12-13 18:39) [4]
> А чем CopyFile не устраивает, зачем изобретать велосипед?
Просто у меня там есть специальный алгоритм по предварительной обработке перед записью :)
> Подозрительно, что у Вас память выделяется в цикле, а освобождается
> за его пределами (т.е. только последний выделенный кусок
> памяти).
Спасибо огромное!
Вот так всегда из-за невнимательности теряется огромное кол-во времени.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.039 c