Page 1 of 2
					
				Файлы Files
				Posted: 07.05.2011 7:22
				by shinma
				Нигде не могу найти описание как работать с файлами.
Конкретно алогритм:
1 открыть файл, если его нет создать.
2 записать туда строку, если не пустой дописать в конец.
3 сохранить, закрыть и выгрузить до след  раза.
и в вики хорошо бы добавить раздел. Работа с файлами.
			 
			
					
				
				Posted: 07.05.2011 8:15
				by Vizit0r
				будет.
http://stealth.od.ua/forum/viewtopic.php?p=5614#5614
главное - это TFileStream
а так вообще из всех *Stream можно писать в файл
 
			 
			
					
				
				Posted: 07.05.2011 8:41
				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.
 
			 
			
					
				
				Posted: 07.05.2011 8:49
				by Vizit0r
				ты извращенец.
весь этот мусор решается простым 
if FileExists (FileName) then ...
			 
			
					
				
				Posted: 07.05.2011 8:59
				by shinma
				проверку я и так вон  закоментировал. я уже знаю как проверить я незнаю как создать.
			 
			
					
				
				Posted: 07.05.2011 9:07
				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); // пробуем открыть
 
			 
			
					
				
				Posted: 07.05.2011 9:12
				by shinma
				оо гуд спасиб это уже лучше, а то от win api(к стати только, что узнал, что то что я писал выше это попытки использовать win api) уже голова болит.
			 
			
					
				
				Posted: 07.05.2011 9:24
				by Vizit0r
				это еще не винапи, это баловство 

 
			 
			
					
				
				Posted: 07.05.2011 9:29
				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.
 
			 
			
					
				
				Posted: 07.05.2011 9:35
				by Vizit0r
				потому что сам виноват. кто за собой созданный класс будет освобождать?
а он, между прочим остается висеть в памяти и занимает файл!
			 
			
					
				
				Posted: 07.05.2011 9:37
				by shinma
				кто за собой созданный класс будет освобождать? 
Где про это можно почитать?
 
			 
			
					
				
				Posted: 07.05.2011 9:40
				by Vizit0r
				в любом учителе по паскалю.
ЛЮБОЙ обьект (класс) созданный через constructor Create надо после окончания работы делать destructor Free
иначе оно висит в памяти и его уже не убрать оттуда до завершения приложения.
			 
			
					
				
				Posted: 07.05.2011 9:43
				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. 
 
			 
			
					
				
				Posted: 07.05.2011 9:43
				by shinma
				аа блин кнопку обновить нажал все есть
			 
			
					
				
				Posted: 07.05.2011 9:44
				by shinma
				спасибо