Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.21;
Скачать: CL | DM;

Вниз

Как узнать размер файла   Найти похожие ветки 

 
Andrewtitoff ©   (2008-02-04 17:02) [0]

Как узнать размер файла, для работы с файлами хочу использовать функции :
_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-04 17:05) [1]

Удалено модератором


 
Andrewtitoff ©   (2008-02-04 17:11) [2]

Так в FileSize(f); нужно указывать переменную типа file, а значит assign(f,"xz.txt") и т.д...,
сами же сказали что нужно пользоваться стандартными ОСовскими функциями что бы небыло проблем....  =(((


 
Andrewtitoff ©   (2008-02-04 17:13) [3]

Как нить через хендл можно сделать?...


 
Сергей М. ©   (2008-02-04 17:17) [4]


> Как нить через хендл можно сделать?


Можно и "через".

GetFileSize

Get = Получить
File = Файл
Size = Размер


 
clickmaker ©   (2008-02-04 17:18) [5]


> [3] Andrewtitoff ©   (04.02.08 17:13)
> Как нить через хендл можно сделать?...

можно и без хэндла: FindFirstFile


 
Сергей М. ©   (2008-02-04 17:19) [6]

Удалено модератором


 
Andrewtitoff ©   (2008-02-04 17:27) [7]

2 Сергей М.
Пасиба
Ну не ты именно, но вы все там утверждали что это верно что нужно все переделывать через хендлы или стримы..


 
ketmar ©   (2008-02-04 17:35) [8]

>[2] Andrewtitoff©(04.02.08 17:11)
есть такое соглашение: функции, начинающиеся с подчёркивания — несколько интимны, и лучше их не использовать.


 
Сергей М. ©   (2008-02-04 17:37) [9]

Ну хорошо.

Пусть не я. но кто-то ведь тебе задавал вопрос, почему именно это самое "хочу"


> для работы с файлами хочу использовать функции
> (далее следует сишная солянка-абракадабра)


ты вдруг захотел ?)

Есть же  дельфийсий ФайлСтрим, есть кроме него огромная куча дельфийских "инструментов" для великолепного по наглядности/удобству/эффективности доступа к файловой подсистеме.

Эта куча чем тебя не удовлетворила ?)


 
Andrewtitoff ©   (2008-02-04 18:05) [10]

Чего то я запутался....
А как?, в чем ошибка?, какого типа должен быть Buf?

var
FHandle1 : Integer;
FHandle2 : Integer;
FileSize : integer;
 Buf : PChar;

implementation

{$R *.dfm}
procedure CopyF(Name1,Name2 : PAnsiChar);
begin
FHandle1:=_lopen(Name1,0);
FHandle2:=_lcreat(Name2,0);
FileSize   := GetFileSize(FHandle1, nil);
If FHandle1 = -1 then showmessage("Error"+Inttostr(IOResult)) else
begin
_lread(FHandle1,Buf,FileSize);
_lwrite(FHandle2,Buf,FileSize);
end;
_lclose(FHandle1);
_lclose(FHandle2);
end;


 
Andrewtitoff ©   (2008-02-04 18:06) [11]

Не ну просто сказали на родных ОСовских лучше , вот я и подумал...  =)))


 
clickmaker ©   (2008-02-04 18:22) [12]


> [10] Andrewtitoff ©   (04.02.08 18:05)

память кто под buf выделять будет?


 
ketmar ©   (2008-02-04 18:38) [13]

>[11] Andrewtitoff©(04.02.08 18:06)
нет, как раз подумать ты забыл…


 
DVM ©   (2008-02-04 22:51) [14]

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;


 
Игорь Шевченко ©   (2008-02-05 09:58) [15]


> Как узнать размер файла


_llseek если ты хочешь пользоваться _l функциями


 
clickmaker ©   (2008-02-05 11:26) [16]


> FD.nFileSizeHigh * 4294967296

лучше FD.nFileSizeHigh shl 32 )


 
ANB   (2008-02-05 11:56) [17]


> Andrewtitoff ©   (04.02.08 18:06) [11]
> Не ну просто сказали на родных ОСовских лучше , вот я и
> подумал...  =)))

Есть родная осовская CopyFileTo (ну почти осовская :) ). Свою то зачем писать ?


 
ANB   (2008-02-05 11:58) [18]

Да, перед тем как ее вызвать желательно проверить, что Дест файла нету, а если он есть - грохнуть его. Перед гроханием на всякий случай почистить ему флаги.


 
Andrewtitoff ©   (2008-02-06 13:16) [19]

2 Игорь Шевченко
Спасибо!, ну ечли вы не рекомендуете функции "_l", значит небудем ими пользоваться..., тогда подскажите чем лучше пользоваться (стримами или хендлами), лучше для меня имеется ввиду что бы снизить возможность возникновения I/O error -ов, по скорости для меня в принципе не принципиально, так как файлы с которыми мне нужно работать не превышают по размеру 1Мб...

2 ANB
Спасибо!, а чем лучше удалять файлы?, и как лучше переименовывать самому копировать и затем удалять или пользоваться комими то стандартными функциями?
Да и посоветуйте пожалуйста как грамотно почистить флаги?


 
Anatoly Podgoretsky ©   (2008-02-06 13:43) [20]

> Andrewtitoff  (06.02.2008 13:16:19)  [19]

При чем тут рекомендации, тут RTFM нужен

Obsolete Functions

_hread
_hwrite
_lclose
_lcreat
_llseek
_lopen
_lread
_lwrite
OpenFile
SetHandleCount


 
Andrewtitoff ©   (2008-02-08 13:05) [21]

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;

и все работало...


 
Andrewtitoff ©   (2008-02-08 13:07) [22]

точнее с "else break;" то естественно не зацикливается, только sn получается на 1 больше, а вот без "else break;" зацикливается....


 
Сергей М. ©   (2008-02-08 13:20) [23]


> Andrewtitoff ©   (08.02.08 13:05) [21]


И эта беда у тебя компилируется ?)


 
ketmar ©   (2008-02-08 13:21) [24]

>while not i<>0 do
это что за хренотень?

---
Understanding is not required. Only obedience.


 
Andrewtitoff ©   (2008-02-08 13:32) [25]

2 Сергей М.
Да, компилируется, а что не так?

2 ketmar
Ой, спасибо!, забыл "not" убрать когда переделывал...  =)))


 
ketmar ©   (2008-02-08 13:38) [26]

>[25] Andrewtitoff © (2008-02-08 13:32:00)
я вообще на этой строке повис. хорошо, пиво было. она ж в глаза бросается и визжит просто. %-)

---
Understanding is not required. Only obedience.


 
Сергей М. ©   (2008-02-08 13:42) [27]


> компилируется, а что не так?


Ну как что ?

semicolon же перед else )


 
Сергей М. ©   (2008-02-08 13:44) [28]

И вообще - что ты хочешь от этого кода ?


 
Andrewtitoff ©   (2008-02-08 13:52) [29]

2 Сергей М
Ааа, ну это то понятно, его естественно там нет в оригинале...
Да я просто пока тут все переделываю совсем запарился и незаметил "нот", теперь все нормально, а вообще этот код просто считает количество записей моего типа в файле, я просто сначала все тупо переправил настримы, а теперь вот разбираюсь где что проглядел...,  а вообще конечно надо поменять на  sn:=F.Sise/671 , просто проглядел...


 
ketmar ©   (2008-02-08 14:21) [30]

>[29] Andrewtitoff © (2008-02-08 13:52:00)
>этот код просто считает количество записей моего типа в файле
OMFG! взять размер файла и поделить на размер записи — никак?

---
Understanding is not required. Only obedience.


 
Andrewtitoff ©   (2008-02-08 14:41) [31]

2 ketmar
А я что написал выше?.... [29] :
......
а вообще конечно надо поменять на  sn:=F.Sise/671 , просто проглядел...


 
ketmar ©   (2008-02-08 14:47) [32]

>[31] Andrewtitoff © (2008-02-08 14:41:00)
соори, я тоже проглядел. %-)

---
Understanding is not required. Only obedience.


 
Игорь Шевченко ©   (2008-02-08 14:57) [33]

Andrewtitoff ©   (08.02.08 13:05) [21]

Читаем правила форума и задаем отдельный вопрос в отдельной ветке.



Страницы: 1 вся ветка

Текущий архив: 2008.12.21;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.021 c
15-1223761025
МемТест
2008-10-12 01:37
2008.12.21
Под Windows XP максимум памяти - это 2 или 4 Гб?


2-1226311240
Rav4
2008-11-10 13:00
2008.12.21
postmessage - Как послать сообщение?


2-1226599478
vegarulez
2008-11-13 21:04
2008.12.21
Подскажите как сделать картинку на канве TButton(VCL)


15-1224769798
Markus13
2008-10-23 17:49
2008.12.21
Передача файла по инету на определенный IP


6-1196884543
Norm Iridium
2007-12-05 22:55
2008.12.21
Delphi как получить HTML-код страницы? А через прокси?