Форум: "Начинающим";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
ВнизКопирование по списку Найти похожие ветки
← →
Steep © (2007-04-11 06:56) [0]Есть список LB.Items в которым указаны пути к файлам
Пытаюсь копировать
-
5 - файлов - нормально
-
126 путей после 80 начинает писать 1799445615 (k)
-
1105 путей - даже сообщение не выводит
Project *** faulted with message "access violation at 0x7c90eddc: write adress 0x00030ff8."
Что за ошибки??
Вот код:var
i, k, Col: cardinal;
Fo : TSHFileOpStruct;
buffer : array[0..4096] of char;
p : pchar;
begin
k :=0;
FillChar(Buffer, sizeof(Buffer), #0);
p := @buffer;
Col := LB.Count-1;
for i:=0 to Col do
begin
if FileExists( LB.Items.Strings[i] ) then
begin
p := StrECopy( p, PChar( LB.Items.Strings[i]) ) + 1;
inc(k);
Showmessage( "путей: "+IntToStr(k) );
end;
end;
FillChar(Fo, sizeof(Fo), #0);
Fo.Wnd := Handle;
Fo.wFunc := FO_COPY;
Fo.pFrom := @Buffer;
Fo.pTo := PChar(LE_Folder.Text);
Fo.fFlags := 0;
if ((SHFileOperation(Fo) <> 0) or
(Fo.fAnyOperationsAborted <> false)) then
ShowMessage("Cancelled")
end;
← →
MBo © (2007-04-11 07:04) [1]а буфера [0..4096] достаточно?
← →
TUser © (2007-04-11 07:06) [2]
> p := StrECopy( p, PChar( LB.Items.Strings[i]) ) + 1;
А плюс один тут зачем? Ты ж увеличиваешь указатель и постепенно выходишь за границы массива buffer, а туда нельзя.
← →
TUser © (2007-04-11 07:09) [3]А понял. 80 путей - это как раз примерно 4кб и занимает. А дальше ты залезаешь, куда нельзя.
← →
Steep © (2007-04-11 07:13) [4]
> А понял. 80 путей - это как раз примерно 4кб и занимает.
> А дальше ты залезаешь, куда нельзя.
т.е. просто увеличить буфер? а до скольки можно увеличить?
> А плюс один тут зачем? Ты ж увеличиваешь указатель и постепенно
> выходишь за границы массива buffer, а туда нельзя.
Незнаю так в примере было. Убрать можно?
← →
MBo © (2007-04-11 07:18) [5]>Убрать можно?
Нет. Строки должны разделяться нулями, вот для нуля место и оставляется, насколько я понимаю
← →
Steep © (2007-04-11 07:30) [6]А в буфер можно записать 51200000?
← →
SlymRO © (2007-04-11 07:44) [7]Steep © (11.04.07 7:13) [4]
а до скольки можно увеличить
До необходимого размера...
var buffer:PChar;
...
Size:=0;
for i:=0 to Col do
begin
if FileExists( LB.Items.Strings[i] ) then
Size:=Size+Length(LB.Items.Strings[i])+1;
end;
GetMem(buffer,Size);
try
...
Finally
FreeMem(buffer);
end;
← →
Steep © (2007-04-11 08:45) [8]Спасибо!
← →
SlymRO © (2007-04-11 08:48) [9]Steep © (11.04.07 8:45) [8]
Помни! последний элемент должен быть 2 нуля #0 т.е. #0#0
← →
Steep © (2007-04-11 09:02) [10]
> Помни! последний элемент должен быть 2 нуля #0 т.е. #0#0
т.е. + 1 +1 или + #0 + #0 ??
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c