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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2012, 19:34   #11
dearkato
Пользователь
 
Регистрация: 15.10.2011
Сообщений: 29
По умолчанию

Цитата:
Сообщение от deathNC Посмотреть сообщение
но Вы же писали, что WriteLn/ReadLn - это стандартные процедуры.
Есть ещё файловые потоки - TFileStream
ну да, но просто мне уже ничего другого на ум уже не идет, да мы только начали писать программы с использованием файлов, так что думаю вариант с WriteLn/ReadLn должен подойти. а вот с файловыми потоками спасибо, сейчас буду разбираться с ними, для меня это еще новое))
dearkato вне форума Ответить с цитированием
Старый 16.02.2012, 19:37   #12
dearkato
Пользователь
 
Регистрация: 15.10.2011
Сообщений: 29
По умолчанию

Цитата:
Сообщение от NetSpace Посмотреть сообщение
посимвольно считывать каждый файл, далее симол переводить в код
ох... не хотелось бы так делать, но идея неплохая, особенно если не использовать третий файл, спасибо за идею)))
dearkato вне форума Ответить с цитированием
Старый 16.02.2012, 21:52   #13
deathNC
Пользователь
 
Аватар для deathNC
 
Регистрация: 10.01.2010
Сообщений: 44
По умолчанию

dearkato, да, без третьего файла хорошо, но не просто - стандартными средствами файлы обычно открываются только для чтения, либо только для записи.
Хотя файловый поток можно открыть и для чтения и для записи одновременно:
Код:
MyStream := TFileStream.Create('text.txt', fmOpenReadWrite);
Это определяет флаг fmOpenReadWrite, который передаётся конструктор Create класса TFileStream
Если получится, попробую реализовать вашу задачу подобным методом (самому стало интересно)
deathNC вне форума Ответить с цитированием
Старый 16.02.2012, 23:55   #14
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
Хорошо

Цитата:
Сообщение от whatever Посмотреть сообщение
Есть у меня идейка, правда хз, оценит препод, или нет :D
Код:
program ChangeFilesNames;
{$APPTYPE CONSOLE}
uses
  SysUtils;
begin
  renamefile('C:\1.txt','C:\tmp.txt');
  renamefile('C:\2.txt','C:\1.txt');
  renamefile('C:\tmp.txt','C:\2.txt');
end.
Думаю идея понятна. Вместо текстовиков пишешь нужные файлы.
Уж если писать код, то надо проверять на наличие ошибок =)...то есть

Код:
program ChangeFilesNames;
{$APPTYPE CONSOLE}
uses
  SysUtils;
begin
{$I-}
  renamefile('C:\1.txt','C:\tmp.txt');
  renamefile('C:\2.txt','C:\1.txt');
  renamefile('C:\tmp.txt','C:\2.txt');
if IOResult<>0 then
    writeln('Нету файлов))))))');
{$I+}
end.
А так +1
Если лень что-то делать, заставь это делать машину ... =,
Katus вне форума Ответить с цитированием
Старый 17.02.2012, 05:32   #15
deathNC
Пользователь
 
Аватар для deathNC
 
Регистрация: 10.01.2010
Сообщений: 44
По умолчанию

Блин, ничего умнее я не смог придумать
Код:
program FilesReplace;

uses
  SysUtils, Classes;

var
  i1, i2: Integer;
  fl1, fl2: TFileStream;
  buff1, buff2: Array of AnsiChar;

begin
  // считываем
  try
    // первый файл
    fl1 := TFileStream.Create('1.txt', fmOpenRead);
    i1 := fl1.Size;
    SetLength(buff1, i1);
    fl1.Seek(0, soFromBeginning);
    fl1.Read(Pointer(buff1)^, i1);
    // второй файл
    fl2 := TFileStream.Create('2.txt', fmOpenRead);
    i2 := fl2.Size;
    SetLength(buff2, i2);
    fl2.Seek(0, soFromBeginning);
    fl2.Read(Pointer(buff2)^, i2);
  finally
    fl1.Free;
    fl2.Free;
  end;
  // записываем
  try
    fl1 := TFileStream.Create('2.txt', fmCreate or fmOpenWrite);
    fl2 := TFileStream.Create('1.txt', fmCreate or fmOpenWrite);
    fl1.Seek(0, soFromBeginning);
    fl2.Seek(0, soFromBeginning);
    fl1.Write(Pointer(buff1)^, i1);
    fl2.Write(Pointer(buff2)^, i2);
  finally
    fl1.Free;
    fl2.Free;
  end;
end.
Но, в принципе, и это работает. И метод не стандартный

На счёт fmOpenReadWrite я ошибся - его сразу и для чтения и для записи толком не попользуешь
deathNC вне форума Ответить с цитированием
Старый 04.03.2012, 22:26   #16
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от Katus Посмотреть сообщение
Уж если писать код, то надо проверять на наличие ошибок =)...то есть
Код:
{$I-}
...
{$I+}
end.
А так +1
Ну тогда уж
Код:
program ChangeFilesNames;
{$APPTYPE CONSOLE}
uses
  SysUtils;
begin
  if (not fileexists('C:\1.txt')) and (not fileexists('C:\2.txt')) then
    begin
      writeln('no files!');
      readln;
      halt;
    end;
  renamefile('C:\1.txt','C:\tmp.txt');
  renamefile('C:\2.txt','C:\1.txt');
  renamefile('C:\tmp.txt','C:\2.txt');
end.
А то {$I-} и {$I+} старомодно

А вообще, путь к файлам задается в программе, делать проверку не вижу смысла. Впрочем это дело вкуса.
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 19.03.2012, 04:10   #17
deathNC
Пользователь
 
Аватар для deathNC
 
Регистрация: 10.01.2010
Сообщений: 44
По умолчанию

whatever, насколько я знаю,
Код:
{$I-}
...
{$I+}
end.
проверяют не только существование файла, но и ошибки в чтении/записи. Так что вариант Katus - более правильное решение
deathNC вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с файлами в дельфи T(h)rasher Помощь студентам 8 06.10.2011 00:00
Работа с MySQL в Дельфи 7 drakhar БД в Delphi 8 01.12.2010 21:13
Работа в Дельфи!!! L0102591 Помощь студентам 2 11.06.2010 04:34
Работа с папками в Дельфи Космос Помощь студентам 2 10.10.2007 20:47