![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать размер файла
Andrewtitoff © (2008-02-04 17:02:00)Как узнать размер файла, для работы с файлами хочу использовать функции :
_lcreat(PathName: PChar; Attribute: Integer):
_lclose(FileHandle: Integer): Integer;
_lopen(PathName: Char; ReadWrite: Integer): Integer;
_lread(FileHandle: Integer; Buffer: PChar; Bytes: Integer): Word;
_lwrite(FileHandle: Integer; Buffer: PChar; Bytes: Integer): Word;
Так вот как просто скопировать файл т.е.
_lcreat(PathName1,Attribute);
_lcreat(PathName2,Attribute);
как тут узнать сколько байт считывать?, или придется читать по байту пока не возвратится 0?
_lread(FileHandle,Buffer,Bytes);
_lwrite(FileHandle,Buffer,Bytes);
_lclose(FileHandle1);
_lclose(FileHandle1);
Игорь Шевченко (2008-02-08 14:57:00) [1]Andrewtitoff © (08.02.08 13:05) [21]
Читаем правила форума и задаем отдельный вопрос в отдельной ветке.
ketmar (2008-02-08 14:47:00) [2]>[31] Andrewtitoff © (2008-02-08 14:41:00)
соори, я тоже проглядел. %-)
---
Understanding is not required. Only obedience.
Andrewtitoff (2008-02-08 14:41:00) [3]2 ketmar
А я что написал выше?.... [29] :
......
а вообще конечно надо поменять на sn:=F.Sise/671 , просто проглядел...
ketmar (2008-02-08 14:21:00) [4]>[29] Andrewtitoff © (2008-02-08 13:52:00)
>этот код просто считает количество записей моего типа в файле
OMFG! взять размер файла и поделить на размер записи — никак?
---
Understanding is not required. Only obedience.
Andrewtitoff (2008-02-08 13:52:00) [5]2 Сергей М
Ааа, ну это то понятно, его естественно там нет в оригинале...
Да я просто пока тут все переделываю совсем запарился и незаметил "нот", теперь все нормально, а вообще этот код просто считает количество записей моего типа в файле, я просто сначала все тупо переправил настримы, а теперь вот разбираюсь где что проглядел..., а вообще конечно надо поменять на sn:=F.Sise/671 , просто проглядел...
Сергей М. (2008-02-08 13:44:00) [6]И вообще - что ты хочешь от этого кода ?
Сергей М. (2008-02-08 13:42:00) [7]
> компилируется, а что не так?
Ну как что ?
semicolon же перед else )
ketmar (2008-02-08 13:38:00) [8]>[25] Andrewtitoff © (2008-02-08 13:32:00)
я вообще на этой строке повис. хорошо, пиво было. она ж в глаза бросается и визжит просто. %-)
---
Understanding is not required. Only obedience.
Andrewtitoff (2008-02-08 13:32:00) [9]2 Сергей М.
Да, компилируется, а что не так?
2 ketmar
Ой, спасибо!, забыл "not" убрать когда переделывал... =)))
ketmar (2008-02-08 13:21:00) [10]>while not i<>0 do
это что за хренотень?
---
Understanding is not required. Only obedience.
Сергей М. (2008-02-08 13:20:00) [11]
> Andrewtitoff © (08.02.08 13:05) [21]
И эта беда у тебя компилируется ?)
Andrewtitoff (2008-02-08 13:07:00) [12]точнее с "else break;" то естественно не зацикливается, только sn получается на 1 больше, а вот без "else break;" зацикливается....
Andrewtitoff (2008-02-08 13:05:00) [13]2 All
Подскажите пожалуйста почему при использовании FileStream у меня цикл зацикливается?....
F := TFileStream.Create(MD+'\p.lft',fmOpenReadWrite);
......
while not i<>0 do
begin
i:=F.read(FString,671);
if i<>0 then sn:=sn+1; else break;
end;
Раньше выло так:
var
f : file of MyString
begin
......
while not eof(f) do
begin
read(f,FString);
sn:=sn+1;
end;
и все работало...
Anatoly Podgoretsky (2008-02-06 13:43:00) [14]> Andrewtitoff (06.02.2008 13:16:19) [19]
При чем тут рекомендации, тут RTFM нужен
Obsolete Functions
_hread
_hwrite
_lclose
_lcreat
_llseek
_lopen
_lread
_lwrite
OpenFile
SetHandleCount
Andrewtitoff (2008-02-06 13:16:00) [15]2 Игорь Шевченко
Спасибо!, ну ечли вы не рекомендуете функции "_l", значит небудем ими пользоваться..., тогда подскажите чем лучше пользоваться (стримами или хендлами), лучше для меня имеется ввиду что бы снизить возможность возникновения I/O error -ов, по скорости для меня в принципе не принципиально, так как файлы с которыми мне нужно работать не превышают по размеру 1Мб...
2 ANB
Спасибо!, а чем лучше удалять файлы?, и как лучше переименовывать самому копировать и затем удалять или пользоваться комими то стандартными функциями?
Да и посоветуйте пожалуйста как грамотно почистить флаги?
ANB (2008-02-05 11:58:00) [16]Да, перед тем как ее вызвать желательно проверить, что Дест файла нету, а если он есть - грохнуть его. Перед гроханием на всякий случай почистить ему флаги.
ANB (2008-02-05 11:56:00) [17]
> Andrewtitoff © (04.02.08 18:06) [11]
> Не ну просто сказали на родных ОСовских лучше , вот я и
> подумал... =)))
Есть родная осовская CopyFileTo (ну почти осовская :) ). Свою то зачем писать ?
clickmaker (2008-02-05 11:26:00) [18]
> FD.nFileSizeHigh * 4294967296
лучше FD.nFileSizeHigh shl 32 )
Игорь Шевченко (2008-02-05 09:58:00) [19]
> Как узнать размер файла
_llseek если ты хочешь пользоваться _l функциями
DVM (2008-02-04 22:51:00) [20]
function FileSize(const FileName: String): Int64;
var
FD : TWin32FindData;
FH : THandle;
begin
Result := 0;
FH := FindFirstFile(PChar(FileName), FD);
if FH = INVALID_HANDLE_VALUE then exit;
Result := FD.nFileSizeHigh * 4294967296 + FD.nFileSizeLow;
Windows.FindClose(FH);
end;