Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Файлы Files

тут можно задать вопрос по скриптингу
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Файлы Files

Post by shinma »

Нигде не могу найти описание как работать с файлами.

Конкретно алогритм:

1 открыть файл, если его нет создать.
2 записать туда строку, если не пустой дописать в конец.
3 сохранить, закрыть и выгрузить до след раза.

и в вики хорошо бы добавить раздел. Работа с файлами.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

будет.
http://stealth.od.ua/forum/viewtopic.php?p=5614#5614

главное - это TFileStream
а так вообще из всех *Stream можно писать в файл
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

Короче тут дофига мусора я так и не смог создать файл если его нет но допер , что мне надо CreateFile. при таком раскладе мне выдает [Error] (Kazli.sc at 56:89): Type mismatch

Направь на путь истенный

Code: Select all

program kazli;

type
   DWORD = cardinal;
 
   TFileTime= record
      dwLowDateTime: DWORD;
      dwHighDateTime: DWORD;
   end;

   FIND_DATA = record
      dwFileAttributes   : DWORD;
      ftCreationTime      : TFileTime;
      ftLastAccessTime   : TFileTime;
      ftLastWriteTime      : TFileTime;
      nFileSizeHigh      : DWORD;
      nFileSizeLow      : DWORD;
      dwOID            : DWORD;
      cFileName         : array[0..259] of char;
   end; 
   
   
const
Kazli = 'D:\pk.txt';

var
a:FIND_DATA;
hFile:THANDLE;

{  LPCTSTR  lpFileName,                         // имя файла
  DWORD  dwDesiredAccess,                      // режим доступа
  DWORD  dwShareMode,                          // совместный доступ
  LPSECURITY_ATTRIBUTES  lpSecurityAttributes, // SD (дескр. защиты)
  DWORD  dwCreationDisposition,                // как действовать
  DWORD  dwFlagsAndAttributes,                 // атрибуты файла
  HANDLE  hTemplateFile                        // дескр.шаблона файла
}
function FindFirstFile(lpFileName : pChar; var lpFindFileData : FIND_DATA) : THandle; external '[email protected] stdcall';
function CreateFile(lpFileName : pChar; dwDesiredAccess:DWORD; dwShareMode:DWORD; lpSecurityAttributes:DWORD;dwCreationDisposition:DWORD;dwFlagsAndAttributes:DWORD;hTemplateFile:THandle): THandle;
{var
   a:FIND_DATA;
begin
   addToSystemJournal(intToStr(FindFirstFile('c:\s2.txt', a)));
End. }


begin

//List := TStringList.Create;
//List.LoadFromFile(Kazli);
//for i := 0 to List.Count-1 do 
//s:=List.strings[i]+' ';
//addToSystemJournal(intToStr(FindFirstFile(Kazli, a)));
//if (FindFirstFile(Kazli, a)<0)  then    TFileStream.Create(Kazli, fmOpenReadWrite + fmShareDenyNone); 
//TFileStream.Create(Kazli, fmOpenReadWrite + fmShareDenyNone);
CreateFile(Kazli,0,NULL,'FILE_SHARE_WRITE','CREATE_NEW','FILE_FLAG_WRITE_THROUGH',NULL ); 



end.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

ты извращенец.

весь этот мусор решается простым
if FileExists (FileName) then ...
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

проверку я и так вон закоментировал. я уже знаю как проверить я незнаю как создать.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

Code: Select all

  if (FileExists(ExtractFilePath(a) + loginCfgName)) then
    mode := fmOpenReadWrite or fmShareDenyWrite
  else
    mode := fmCreate;

  fl := TFileStream.Create(ExtractFilePath(a) + loginCfgName, mode); // пробуем открыть
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

оо гуд спасиб это уже лучше, а то от win api(к стати только, что узнал, что то что я писал выше это попытки использовать win api) уже голова болит.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

это еще не винапи, это баловство :)
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

выдает 13:27:24:755 [hz]: Exception: Cannot create file "D:\pk.txt". Процесс не может получить доступ к файлу, так как этот файл занят другим процессом at 0.165
Но файда так и не создал на диске д пусто

Code: Select all

program kazli; 
const
Kazli = 'D:\pk.txt';
var
fl:TFileStream;
mode:word;
begin
  if (FileExists(Kazli)) then
    mode := fmOpenReadWrite or fmShareDenyWrite
  else
    mode := fmCreate;
  fl := TFileStream.Create(Kazli, mode); // пробуем открыть 
end.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

потому что сам виноват. кто за собой созданный класс будет освобождать?
а он, между прочим остается висеть в памяти и занимает файл!
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

кто за собой созданный класс будет освобождать?
Где про это можно почитать?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

в любом учителе по паскалю.
ЛЮБОЙ обьект (класс) созданный через constructor Create надо после окончания работы делать destructor Free
иначе оно висит в памяти и его уже не убрать оттуда до завершения приложения.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

Все равно файла нет, но теперь и ошибок нет

Code: Select all

program kazli;
const
Kazli = 'D:\pk.txt';
var
fl:TFileStream;
mode:word;
begin
 fl.Free; //это чтобы предыдущий  закрыть.
  if (FileExists(Kazli)) then
    mode := fmOpenReadWrite or fmShareDenyWrite
  else
    mode := fmCreate;
  fl := TFileStream.Create(Kazli, mode); // пробуем открыть
 fl.Free; 
end. 
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

аа блин кнопку обновить нажал все есть
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

спасибо
Post Reply