Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема С файлами 
V
    Опции темы
lordgabriel
  Дата 13.5.2008, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Программа почемуто открывает нормально файлы только если они лежат в корне с программой.
Работа программы
этапы:
1) открываю файл 
2) файл кодируется и сохраняет в временно в папку Data
3) файл сжимается и сохранятется в зашифрованый в папку Crypt
Проблема такая что если я открою любой файл не из корня то выскакивает ошибка
FInOutError ... Invalid filename

Приведу код 
Код

  memo1.Lines.Add('Запущен процесс шифрования');
  memo1.Lines.Add('Файл:'+edit1.Text);

  memo1.Lines.Add('> Кодирование файла');
  n:=0;
  C:= length(MaskEdit1.Text);
  setlength(key,C);
  for I2 := 1 to C do
  key[i2] := byte(MaskEdit1.Text[i2]);



  AssignFile(f1,edit1.Text);
  Reset(f1) ;
  OutLink:= extractfilename(edit1.Text);
  AssignFile(f2,'data\temp.r');
  InLink := 'data\temp.r';
  rewrite(f2) ;

  While Not Eof(f1) do
  begin
    Read(f1, b);
    n := n + 1;
    if n = C then n := 0;
    b := b Xor key[n];
    Write(f2, b);
  end;

  CloseFile(f1);
  CloseFile(f2);

  /// -------------------------
  memo1.Lines.Add('Кодирование завершено');


  AssignFile(FInput,InLink);
  Reset(FInput,1);
  if FileSize(FInput)=0 then
    begin
    ShowMessage('Файл пуст...');
    exit;
    end;
  ClearTree;
  repeat
  BlockRead(FInput,Buf,SizeOf(Buf),NumRead);
  Application.ProcessMessages;
  if NumRead>0 then
    for i:=0 to NumRead-1 do
      begin
      inc(El[ord(Buf[i])].Count);
      inc(El[ord(Buf[i])].E);
      end;

  until (NumRead<SizeOf(Buf));
  FS:=FileSize(FInput);
  CreateTree(FS);
  k:=0;
  for i:=0 to 255 do
    if El[i].Length<>0 then
      begin

      end
    else k:=k+1;

  CloseFile(FInput);
   memo1.Lines.Add('> Архивация файла');
  //-----------------------
  AssignFile(FInput,Inlink);
  AssignFile(FOutput, 'Crypt\'+OutLink);

  Rewrite(FOutput,1);
  Reset(FInput,1);
  Seek(FInput,0);
  repeat
  BlockRead(FInput,Buf,BufSize,Numread);
  if NumRead>0 then
    for i:=0 to Numread-1 do
    begin
    tmp2:='';
    Ost:=El[ord(Buf[i])].Code;
    for j:=0 to El[ord(Buf[i])].Length-1 do
      begin
      Code:=Concat(Code,IntToStr(Ost mod 2));
      Ost:=Ost shr 1;
      end;
    end;
  until (NumRead<SizeOf(Buf));

  j:=0;
  for i:=0 to 255 do
    if El[i].E>0 then
      inc(j);
  if j=256 then j:=0;
  Buf[0]:=chr(j);
  k:=1;
  for i:=0 to 255 do
    if El[i].E>0 then
      begin
      Buf[k]:=chr(i);
      inc(k);
      FS:=El[i].E;
      for j:=1 downto 0 do
        begin
        Buf[k+j]:=chr(FS mod 256);
        FS:=FS shr 8;
        end;
      inc(k,2);
      end;

  BlockWrite(FOutput,Buf,k);
  tmp2:=code;
  code:='';
  for i:=0 to length(tmp2)-1 do
    begin
    code:=concat(code,tmp2[Length(tmp2)]);
    delete(tmp2,Length(tmp2),1);
    end;
  if Length(Code)mod 8>0 then
    j:=Length(Code)div 8 +1
  else j:=Length(Code)div 8;
  i:=0;
  while i<j do
    begin
    while (i<SizeOf(Buf))and(i<j) do
      begin
      buf[i]:=Chr(BitToByte(Code));
      inc(i);
      end;
    BlockWrite(FOutput,Buf,i);
    if i<j then
      begin
      dec(j,i);
      i:=0;
      end;
    end;
  memo1.Lines.Add('Архивация завершина');
  CloseFile(FOutput);
  CloseFile(FInput);
  deleteFile(InLink);

  memo1.Lines.Add('Файл зашифрован !');

PM MAIL   Вверх
SneG0K
Дата 13.5.2008, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 3
Всего: 54



Попробуй указывать полный путь smile 
PM WWW Skype   Вверх
Данкинг
Дата 13.5.2008, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Что такое "в корне с программой"?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
lordgabriel
Дата 13.5.2008, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



корень ну та папка где сам ексзешник получается что только те файлы что возле екзешника.
с ними прога работает не ругается smile 

Указать полный путь куда? 
К папкам data .
ну будет работать наверно ну это же не универсально а если прога будет лежать не 
на таком пути E:\Programming\Company\CoderReal\Coder2\Coder1\Coder
а на тако  E:\Coder
то что тогда будет... smile

Добавлено через 1 минуту и 42 секунды
пишет Дебагер
FInOutError ... Invalid filename
и показывает сюда

rewrite(f2) ;

Добавлено через 6 минут и 34 секунды
Попробовал сделать полный путь к папкам
работатет нормально. smile  smile 
Может сделать окно настройки где надо настраивать путь к папкам.
Ладно пока буде делать так.
 smile 
Ну может както можно не указывать полный путь smile 

PM MAIL   Вверх
Данкинг
Дата 13.5.2008, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



А в чём проблема указать полный путь? Ты же файл выбираешь с помощью диалога или как?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
SneG0K
Дата 13.5.2008, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 3
Всего: 54



Цитата(lordgabriel @  13.5.2008,  20:16 Найти цитируемый пост)
Может сделать окно настройки где надо настраивать путь к папкам.

А ты узнавай путь до программы, и от сюда ты уже будеш знать путь к папке, где лежит твоя программа... а там уже делай с этим путем все, что тебе нравиться
PM WWW Skype   Вверх
lordgabriel
Дата 13.5.2008, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



УРА !!!
Я нашел выход и все теперь работатет
После того как я перепробовал работу с config.cfg , config.ini , smile  smile 

я нашел выход. Вот он    smile smile smile  

  AssignFile(f2,ExtractFilePath(ParamStr(0))+'data\temp.R');

PM MAIL   Вверх
Данкинг
Дата 13.5.2008, 23:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Я ведь хотел пример написать часа 2 назад, но почему-то забыл. smile В общем, я бы вместо ParamStr(0) написал application.ExeName.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.