Текущий архив: 2002.12.26;
Скачать: CL | DM;
ВнизMkDir??? Найти похожие ветки
← →
Bedny (2002-12-12 22:33) [0]Люди, похелпте, плиз! Хочу закончить и сюда вывалить изменённый fmxutils.pas, но не хватает для него всего нескольких строк, чтобы создать новый путь на диске (любой, по выбору пользователя). Кто в курсе, как это делается, напишите, буду очень благодарен! =) P. S. MkDir создаёт только ОДИН подкататалог, да ещё если тот не существует, а надо целый путь, возможно, включающий уже существующие папки.
← →
Song (2002-12-12 22:40) [1]ForceDirectories()
← →
Георгий Бедный (2002-12-13 15:04) [2]Сенкс! А я думал, тут сто лет надо ответа ждать. I love this fuckung world! :):):):):):)
← →
Георгий Бедный (2002-12-13 20:10) [3]Не хотел беспокоить, но какие-то баги наблюдаются: когда задаёшь путь, длиннее существующего меньше, чем на 2 папки, файл сохраняется под именем последнего каталога (без расширения). Не в курсе, почему так?
← →
Anatoly Podgoretsky (2002-12-13 20:22) [4]Покажи код
← →
Георгий Бедный (2002-12-13 22:22) [5]function CopyFile(const FileName, DestName: TFileName; Egression: Boolean): Boolean;
var
CopyBuffer: Pointer; { буфер для копирования }
BytesCopied: Longint; {размер копируемых данных}
Source, Dest: Integer; { handles }
Destination: TFileName; { имя каталога, куда копируется файл }
const
ChunkSize: Longint = 8192; { размер отрезков для копирования }
label 1;
begin
Destination:=ExpandFileName(DestName); { абсолютный путь }
if Egression then ForceDirectories(Destination); {новый каталог}
if HasAttr(Destination, faDirectory) then { если это каталог,.. }
{ ...дописать имя конечного файла }
Destination:=Destination+"\"+ExtractFileName(FileName);
GetMem(CopyBuffer,ChunkSize); { распределить буфер }
Source:=FileOpen(FileName, fmShareDenyWrite); { открыть существующий файл }
if Source<0 then goto 1;
Dest:=FileCreate(Destination); { создать конечный файл; перезаписать существующий }
if Dest<0 then goto 1;
try
repeat
BytesCopied:=FileRead(Source, CopyBuffer^, ChunkSize); { прочитать отрезок }
if BytesCopied > 0 then { если отрезок считан,.. }
FileWrite(Dest, CopyBuffer^, BytesCopied); { ...записывать отрезки,.. }
until BytesCopied < ChunkSize; { ...пока они есть }
finally
FileClose(Dest); { закрыть конечный файл }
end;
FileClose(Source); { закрыть исходный файл }
FreeMem(CopyBuffer, ChunkSize); { освободить буфер }
Result:=True;
1:end;
← →
sniknik (2002-12-13 22:45) [6]ошибка (возможно не единственная)
Destination:= ExpandFileName(DestName); { абсолютный путь }
потом ForceDirectories(Destination);
вместо ExpandFileName надо ExtractFilePath (для ForceDirectories нужна директория а не файл).
← →
Георгий Бедный (2002-12-14 10:18) [7]А ExtractFilePath всегда возвращает абсолютный путь?
← →
Георгий Бедный (2002-12-14 10:18) [8]А ExtractFilePath всегда возвращает абсолютный путь? А в главном модуле я везде задаю директорий.
← →
sniknik (2002-12-14 15:43) [9]ExtractFilePath выделяет путь из из полного путь\файл.
и вообще чего так сложно? есть стандартный CopyFile. вся твоя процедура делается в 2 строки.
function MyCopyFile(SourceName, DestName: string): Boolean;
begin
ForceDirectories(ExtractFilePath(DestName));
result:= CopyFile(PChar(SourceName), PChar(DestName), FALSE);
end;
//вызов
if not MyCopyFile("D:\TEST.TXT", "D:\terrst\test.txt") then {см. GetLastError}
← →
Георгий Бедный (2002-12-15 19:04) [10]Сенкс! Вообще-то, так часто бывает с русским человеком - через Сибирь в Харьков!
← →
Юрий Зотов (2002-12-15 20:41) [11]> Хочу закончить и сюда вывалить изменённый fmxutils.pas
> чего так сложно? есть стандартный CopyFile. вся твоя процедура
> делается в 2 строки.
> Вообще-то, так часто бывает с русским человеком - через Сибирь
> в Харьков!
Что ж, в связи с процитированным очень интересно будет взглянуть на этот "изменённый fmxutils.pas" после того, как он будет "вывален" для всеобщего пользования.
Страницы: 1 вся ветка
Текущий архив: 2002.12.26;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.006 c