Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 1
Регистрация: 05.09.2014
Сообщений: 34
1

Обработка исключений TFileStream

28.12.2016, 04:53. Показов 1615. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, как при открытии файла через TFileStream.Create сделать исключение: если этот файл открыт в другой программе - пропускать его. Так же при записи - если запись невозможна - пропустить файл.
А то у меня программа просто зависает и работа дальше не идёт.

Вот какой был код изначально:

Delphi
1
2
3
4
5
Source:= TFileStream.Create(FileList.Strings[0],fmOpenRead); // Здесь берём файл из FileList
Name:=FileList.Strings[0]+'.mod'; // Новое имя файла
{Ещё немного кода}
Dest:= TFileStream.Create(Name,fmCreate); // Создание нового файла
{Ещё немного кода}
Весь участок кода где может быть ошибка, уже отредактированный мною:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
procedure TForm1.btn1Click(Sender: TObject);
 
var
  Cipher: TDCP_rc4;
  Name: string;
  Source, Dest: TFileStream;
 
begin
 
While FileList.Count<>0 do begin
 
try
Source:= TFileStream.Create(FileList.Strings[0],fmOpenRead or fmShareDenyNone); // fmShareDenyNone частично помогло
except
on EFOpenError do FileList.Delete(0); end;
 
try
Name:=FileList.Strings[0]+'.mod'; // Новое имя файла
 
Dest:= TFileStream.Create(Name,fmCreate or fmShareDenyWrite); // с fmShareDenyWrite разницы не заметил
 
except
on EFCreateError do FileList.Delete(0); end;
 
Cipher:= TDCP_rc4.Create(Self);
Cipher.InitStr(KeyStr,TDCP_sha1);
Cipher.EncryptStream(Source,Dest,Source.Size);
Cipher.Burn;
Cipher.Free;
Dest.Free;
Source.Free;
DeleteFile(FileList.Strings[0]);
FileList.Delete(0);
end;
 
end;
О программе - это шифратор текстовых файлов методом rc4 с использованием CryptoTrooper-master

Я полагаю ошибка ещё может быть здесь и зависает этот поток: Cipher.EncryptStream(Source,Dest,Source.Size);

Помогите мне пожалуйста разобраться как это устранить. Заранее спасибо.
Вложения
Тип файла: zip CryptoTrooper-master.zip (1.43 Мб, 3 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.12.2016, 04:53
Ответы с готовыми решениями:

обработка исключений
Добрый вечер Есть проблема - jpeg error 53 (плеер, если в тегах нету обложки) Как мне захайдить...

обработка исключений
что делать, если 1. вместо числа пользователь подсунул строку 2. Dseff :=...

Обработка исключений
Создать программу, вычисляющую логарифм числа.Для этого надо поместить в форму два компонента Tedit...

Обработка исключений
Составить программу, вычисляющую тангенс угла. Программа должна выполнять обработку исключений c...

11
1 / 1 / 1
Регистрация: 05.09.2014
Сообщений: 34
28.12.2016, 14:09  [ТС] 2
Извиняюсь, ошибся. Прикрепленный файл никак не относится к программе.
Шифрование работает с помощью dcpcrypt2
Вложения
Тип файла: zip dcpcrypt2.zip (196.7 Кб, 4 просмотров)
0
1 / 1 / 1
Регистрация: 05.09.2014
Сообщений: 34
01.01.2017, 02:20  [ТС] 3
Help me...
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
01.01.2017, 02:48 4
Цитата Сообщение от Bars1337 Посмотреть сообщение
Извиняюсь, ошибся. Прикрепленный файл никак не относится к программе.
Если "программа зависает" и ты не знаешь почему, выкладывай весь ее код.
И/или учись пользоваться отладчиком.
0
251 / 162 / 24
Регистрация: 22.08.2014
Сообщений: 1,598
Записей в блоге: 1
01.01.2017, 10:18 5
Цитата Сообщение от Bars1337 Посмотреть сообщение
Так же при записи - если запись невозможна - пропустить файл.
А то у меня программа просто зависает и работа дальше не идёт.
Да try везде вставляй , FileOpen применяй.
0
1 / 1 / 1
Регистрация: 05.09.2014
Сообщений: 34
01.01.2017, 14:12  [ТС] 6
Цитата Сообщение от northener Посмотреть сообщение
Если "программа зависает" и ты не знаешь почему, выкладывай весь ее код.
И/или учись пользоваться отладчиком.
Отладчик не показывает ошибку потока.
Весь код нет смысла выкладывать, этого вполне достаточно для работы.

Цитата Сообщение от planetoxod Посмотреть сообщение
Да try везде вставляй , FileOpen применяй.
Серьезно ?
А как это здесь реализовать ?
Delphi
1
2
3
4
5
6
7
Cipher:= TDCP_rc4.Create(Self);
Cipher.InitStr(KeyStr,TDCP_sha1);
Cipher.EncryptStream(Source,Dest,Source.Size);
Cipher.Burn;
Cipher.Free;
Dest.Free;
Source.Free;
0
1 / 1 / 1
Регистрация: 05.09.2014
Сообщений: 34
01.01.2017, 14:38  [ТС] 7
Исходник проекта, для работы dcpcrypt2 должен быть установлен.
Вложения
Тип файла: rar Test1.rar (166.1 Кб, 4 просмотров)
0
251 / 162 / 24
Регистрация: 22.08.2014
Сообщений: 1,598
Записей в блоге: 1
01.01.2017, 22:27 8
Цитата Сообщение от Bars1337 Посмотреть сообщение
А как это здесь реализовать ?
раньше же вставлял.

Добавлено через 42 секунды
Source,Dest могут быть nil .

Добавлено через 2 минуты
да и всё остальное.
0
1 / 1 / 1
Регистрация: 05.09.2014
Сообщений: 34
02.01.2017, 03:29  [ТС] 9
Цитата Сообщение от planetoxod Посмотреть сообщение
раньше же вставлял.
Добавлено через 42 секунды
Source,Dest могут быть nil .
Добавлено через 2 минуты
да и всё остальное.
Ничего не помогает(
Пробовал даже в DCPcrypt2 изменить функцию - всё-равно результат тот же
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function TDCP_cipher.EncryptStream(InStream, OutStream: TStream; Size: longword): longword;
var
  Buffer: array[0..8191] of byte;
  i, Read: longword;
begin
  Result:= 0;
  for i:= 1 to (Size div Sizeof(Buffer)) do
  begin
    Read:= InStream.Read(Buffer,Sizeof(Buffer));
    Inc(Result,Read);
    Encrypt(Buffer,Buffer,Read);
    try
    OutStream.Write(Buffer,Read);
    except
on e:exception do Burn; end;
  end;
  if (Size mod Sizeof(Buffer))<> 0 then
  begin
    Read:= InStream.Read(Buffer,Size mod Sizeof(Buffer));
    Inc(Result,Read);
    Encrypt(Buffer,Buffer,Read);
    try
    OutStream.Write(Buffer,Read);
    except
on e:exception do Burn; end;
  end;
end;
Добавлено через 1 минуту
Или я тупой или это невозможно, уже весь гугл перекопал.
Нашел только намёк на winapi и то что это слишком сложно для обычного delphi-программиста.
0
251 / 162 / 24
Регистрация: 22.08.2014
Сообщений: 1,598
Записей в блоге: 1
02.01.2017, 11:47 10
Delphi
1
2
3
4
5
6
7
8
9
10
Cipher:= TDCP_rc4.Create(Self);
Try
 Cipher.InitStr(KeyStr,TDCP_sha1);
 Cipher.EncryptStream(Source,Dest,Source.Size);
 Cipher.Burn;
finally
 if  Cipher<>nil then Cipher.Free;
 if  Dest<>nil then Dest.Free;
 if  Source<>nil then Source.Free;
end;
Добавлено через 10 минут
Цитата Сообщение от Bars1337 Посмотреть сообщение
результат тот же
Зависание ?
0
1 / 1 / 1
Регистрация: 05.09.2014
Сообщений: 34
02.01.2017, 16:11  [ТС] 11
Цитата Сообщение от planetoxod Посмотреть сообщение
Сообщение от Bars1337
результат тот же
Зависание ?

Твой способ не помог к сожалению.
Программа просто останавливается и дальше работа не идёт по списку.
Нужно как-то поправить функции DCPcrypt2, другого выхода не вижу.
0
1 / 1 / 1
Регистрация: 05.09.2014
Сообщений: 34
08.01.2017, 04:36  [ТС] 12
Я ошибался, помогло вот что:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
try
Source:= TFileStream.Create(FileList.Strings[0],fmOpenRead or fmShareDenyNone);  // Чтение оригинального файла
except
FileList.Delete(0);
Continue;
end;         // Если прочитать не удалось - удаляем из списка и переходим к началу цикла
 
 
Name:=FileList.Strings[0]+'.mod'; // Новое имя файла
 
try
Dest:= TFileStream.Create(Name,fmCreate or fmShareDenyWrite);  // Запись мод. файла
except
FileList.Delete(0);
Continue;
end;      // Если записать не удалось - удаляем из списка и переходим к началу цикла
Если кому надо.
0
08.01.2017, 04:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2017, 04:36
Помогаю со студенческими работами здесь

Обработка исключений
Здравствуйте у меня есть поиск и если я введу что то неправильно то выскакивает ошибка мол бд...

Обработка исключений!
Привет, ребята. Столкнулся с проблемой, препод задал написать класс Candidate, и в свойствах класса...

Обработка исключений
Всем доброго времени суток. Есть такой код: strngrd2.Cells := Form1.edt1.Text; strngrd2.Cells :=...

Обработка исключений Делфи
Подскажите, как сделать обработку исключений на дату?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru