Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2007, 00:58   #1
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
Восклицание Работа с файлами (создание, удаление, открытие, связываение с переменной, очищение памяти переменной)

Дайте, пожалуйста, подробную консультацию по работе с файлами (создание, удаление, открытие, связываение с переменной, очищение памяти переменной и т.д.).
Arkuz вне форума Ответить с цитированием
Старый 25.09.2007, 07:19   #2
-=AlmAt=-
Новичок
Джуниор
 
Регистрация: 25.09.2007
Сообщений: 1
По умолчанию

На каком языке прогр-я тебе написать? Delphi? C++? VB?
-=AlmAt=- вне форума Ответить с цитированием
Старый 25.09.2007, 07:47   #3
execom
Редкий тунеядец
Форумчанин
 
Аватар для execom
 
Регистрация: 29.10.2006
Сообщений: 595
По умолчанию

С файлами можно работать по разному...
1)как в паскале:
Код:
label
  NAHUY;
const
  BlockSize=$1000;// констнта на которой всё завязано - 4096 
var
    f : file;//Нетипизированная файловая переменная
  Buf : array [1..BlockSize] of char;//Буфер
    i : integer;
begin
for i:=1 to BlockSize do
Buf[i]:=chr(ord(random(256)));//Набиваем буфер хламом
FileMode:=2;//Ставим режим обращения к файлам только запись
AssignFile(f,'tmp');//Ассоциируем путь с файловой переменной
{$I-}//отключаем стандартную обработку ошибок
ReWrite(f);//создаём новый/или перезаписуем старый файл
If IOResult=0 then else goto NAHUY;//если ошибка то НАХ))
{$I+}//Включаем стандартную обработку ошибок
BlockWrite(f,Buf,BlockSize);//Пишем в файл ассоциированный с переменной данные из буфера в количестве его размера...
CloseFile(f);//закрываем файл
//////////
FileMode:=0;//Cтавим режим работы с файлами токо чтение...
AssignFile(f,'tmp');
{$I-}
Reset(f,1);//Открываем файл
If IOResult=0 then else goto NAHUY;
{$i+}
seek(f,100);//Переходим к 100 байту
BlockRead(f,Buf,FileSize(f)-100);//Читаем в буфер всё кроме первых 100 байт..
CloseFile(f);
NAHUY://если ошибка дуем сюда))
end.
У этого способа есть один значительный косяк... привязка к режиму обращения к файлу... если стоит FileMode:=0 то и другие файлы параллельно открытые не получится писать.... и наоборот))

2)Еще есь способ работать с файлами с помощью API функций... В делфи есть возможность применения как прямых API файловых функций типо : CreateFile, WriteFile, ReadFile, SetFilePointer, так и их упрощенными аналагами соответственно: OpenFile FileWrite FileRead FileSeek... Приведу примеры обоих вариантов работы:

Код:
var
      FH : THandle;
       B : DWORD;
begin
  FH := CreateFile('tmp', GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, 0, 0);//Создаём файл
  WriteFile(FH, Buffer[0], lstrlen(Buffer), B, nil);//пишем в него буфер
  CloseHandle(FH);//закрываем
С помощью CreateFile варьируя тегами можно открывать для записи и/или чтения, создавать файл или его запускать.. Не буду приводить весь хелп по этой великой функции))если надо отдельно попросишь)))

В целом всё тоже самое что и в паскале) токо другая ассоциация))

Теперь приведу пример работы с упращёнными функциями причём работы с виртуальной памятью)) программа просто копирует последние 777 байт заданого файла...

Код:
var
  p : pointer;
  FH : integer;
begin
  GetMem(p,777);//Выделяем память 
  try
    FH:=FileOpen('tmp1',fmOpenRead);//открываем файл токо для чтения
    if FH<>-1 then//если нет ошибки
      begin
        FileSeek(FH,-777,2);//переходим на 777 позицию с конца
        FileRead(FH,p^,777);//читаем
        FileClose(FH);//закрываем
        FH:=FileCreate('tmp2');//создаём
        if FH<>-1then //если всё гуд
          begin
            FileWrite(FH,p^,777);//пишем
            FileClose(FH)//закрываем
          end
      end;
  finally
    FreeMem(p)//освобождаем переменную....
  end
end;
Хочестя отметить что сорци было лень проверять поэтому возможны всякие "приятные мелочи")))
execom вне форума Ответить с цитированием
Старый 25.09.2007, 08:10   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

http://www.delphikingdom.com/asp/vie...catalogID=1184
SERG1980 вне форума Ответить с цитированием
Старый 25.09.2007, 08:35   #5
Yoger
Пользователь
 
Регистрация: 16.01.2007
Сообщений: 15
По умолчанию

Еще вопрос по теме - каким методом можно удалить конкретную строку из файла? Например,считать Readln, если какое либо условие выполяется, удалить?
Yoger вне форума Ответить с цитированием
Старый 25.09.2007, 08:45   #6
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Можно попробовать через StringList. Загрузи файл в него, сделай какие надо операции и сохрани ибратно в файл
SERG1980 вне форума Ответить с цитированием
Старый 25.09.2007, 08:55   #7
Yoger
Пользователь
 
Регистрация: 16.01.2007
Сообщений: 15
По умолчанию

Спасибо, нашел в старых постах. Я просто хотел узнать, может кто попроще метод предложит, через Trancate или еще что-нить..
Yoger вне форума Ответить с цитированием
Старый 25.09.2007, 10:57   #8
А. Долматов
Форумчанин
 
Аватар для А. Долматов
 
Регистрация: 15.02.2007
Сообщений: 183
По умолчанию

можно еще циклом весь файл просматривать, если файл типизированный, то используя процедуру seek перемещаться по его содержимому. А текстовый, то просто записывать каждую строку файла в стринговую переменную и при помощи элементарных строковых функций выполнять поиск подстроки. а потом просто затереть найденную строку.
Знать все невозможно, в силу того, что жить бы стало неинтересно.
А. Долматов вне форума Ответить с цитированием
Старый 25.09.2007, 11:25   #9
Yoger
Пользователь
 
Регистрация: 16.01.2007
Сообщений: 15
По умолчанию

Цитата:
Сообщение от А. Долматов Посмотреть сообщение
можно еще циклом весь файл просматривать, если файл типизированный, то используя процедуру seek перемещаться по его содержимому. А текстовый, то просто записывать каждую строку файла в стринговую переменную и при помощи элементарных строковых функций выполнять поиск подстроки. а потом просто затереть найденную строку.
Файл текстовый, а метода для затирания строки я не нашел
Yoger вне форума Ответить с цитированием
Старый 25.09.2007, 12:04   #10
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

Цитата:
Сообщение от Yoger Посмотреть сообщение
Файл текстовый, а метода для затирания строки я не нашел
var
i:TStringList;
h:string;
begin
i:=TStringList.Create;
i.LoadFromFile('c:\1.txt');
if i.Strings[0]='1' then i.Strings[0]:='11'; // тут можешь в цикле прогнать все строки
i.SaveToFile('c:\1.txt');
end;
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Pitbull вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверить тип переменной satana Общие вопросы Delphi 10 20.11.2010 21:43
FireFox проблема с переменной Romanbl4 JavaScript, Ajax 2 04.07.2008 02:27
как получить значение переменной smoke888 PHP 3 20.06.2008 02:11
Замена константы, переменной valerij Microsoft Office Excel 2 20.03.2008 21:16