Форум программистов, компьютерный форум, киберфорум
Delphi: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
禁止
 Аватар для FromOutSide
13 / 11 / 2
Регистрация: 04.09.2014
Сообщений: 230

Работа с файлами

16.12.2014, 21:58. Показов 1285. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Программа должна сохранять файлы с шифром который содержит цифры. При открытии файла приложением, шифр внутри файла преобразуется в цифры, и вписывается в один из edit'ов. Далее появляются различные компоненты, в зависимости от того, какой ''уровень допуска''.
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
37
38
39
var
  Form1: TForm1;
  f: file of real;
  i: real;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
i:=StrTofloat(Edit1.Text);
AssignFile(f,edit2.text + '.save');
Rewrite(f);
Write(f, i);
Reset(f);
CloseFile(f);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
AssignFile(f,edit2.text + '.save');
Reset(f);
Read(f, i);
Edit1.Text := floatToStr(i);
CloseFile(f);
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.caption:='уровень допуска '+ edit1.text;
if edit1.text='1' then button3.visible:=true else button3.visible:=false;
end;
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in['0'..'9',#8])then
key:=#0;
end;
Изменить цифру в edit1 нельзя, тем более на что-то другое, но проблема в том что цифру можно отследить и изменить другими прогами (тут сам постараюсь).
Можно ли
как то сохранить подобный документ любой иной информацией, но чтоб на одной из строк этого файла был текст который и будет читаться прогой для вписывания этой инфы в edit1.
Буду благодарен за помощь.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.12.2014, 21:58
Ответы с готовыми решениями:

Работа с файлами
Добрый день! У меня следующая программа. С помощью TreeViewer я открываю файлы в другой форме. Вот кусок кода. procedure...

Работа с файлами
Читает ли Delphi файлы Exсel?

Работа с файлами
1.Делал шифровщик файлов,и каждый байт читал->изменял->записывал. Но получилось долго, может есть способ быстрее записывать\читать. ...

6
Пишу на Delphi...иногда
 Аватар для cotseec
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
16.12.2014, 22:26
Цитата Сообщение от FromOutSide Посмотреть сообщение
Изменить цифру в edit1 нельзя, тем более на что-то другое, но проблема в том что цифру можно отследить и изменить другими прогами (тут сам постараюсь).
Можно ли
как то сохранить подобный документ любой иной информацией, но чтоб на одной из строк этого файла был текст который и будет читаться прогой для вписывания этой инфы в edit1.
Что же этим хотел сказать автор? (с)

Задача в том, чтобы программа могла прочитать из файла какую-то информацию (цифру), а посторонний не мог ее изменить (а если изменит, то программа начнет дико ругаться)?
шифрование - на форуме куча тем, начиная от шифра Цезаря, заканчивая RSA и/или контроль целостности данных
З.Ы. а при чем тут WinAPI, если приведенный код очень даже VCL?
0
禁止
 Аватар для FromOutSide
13 / 11 / 2
Регистрация: 04.09.2014
Сообщений: 230
17.12.2014, 09:31  [ТС]
Уважаемый otseec , Возможно я и не умею грамотно излагать свою мысль, чтоб все окружающие смогли меня понять, но все же постараюсь.
Как выше уже написано, что, сам постараюсь решить проблему, с тем, чтоб программа не начала
дико ругаться
и уже решил эту проблему. и как я понял до вас, моя мысль не дойдет ( не примите за оскорбление). Опять же пишу но более подробно, что создается файл с расширением .save который будет содержать информацию (зашифрованную) в которой будет иметься всего лишь одна строка с той самой информацией (точней цифрой) которая потребуется для ввода ее в edit1. надеюсь теперь все же я смог донести свою мысль если же нет то уже и не знаю.

Добавлено через 10 часов 38 минут
cotseec, вы наверно не прочитали код делфи который я вписал. если б я не написал этот код тогда было понятно ваше непонимание моего вопроса.
0
Пишу на Delphi...иногда
 Аватар для cotseec
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
17.12.2014, 18:52
Цитата Сообщение от FromOutSide Посмотреть сообщение
код делфи который я вписал
а в коде WinAPI и не очень-то видно.
все, что там делается - по клику на одну кнопку сохраняется в файл некоторое числовое значение из поля ввода, по клику на другую кнопку из файла читается числовое значение и вписывается в поле ввода, в обработчике таймера определено условие показа/скрытия кнопки и в обработчике нажатия клавиши в поле ввода отсекаются только цифры.

растекшись мыслью по древу....
необходимо создать файл, наполненный различными незначащими данными и только по строго определенному смещению записать полезную информацию (в данном случае значение типа Real) с тем, чтобы потом прочитать из этого файла требуемое значение?
0
禁止
 Аватар для FromOutSide
13 / 11 / 2
Регистрация: 04.09.2014
Сообщений: 230
18.12.2014, 04:28  [ТС]
cotseec, все верно. В общем
Сообщение от cotseecа
в коде WinAPI и не очень-то видно.
все, что там делается - по клику на одну кнопку сохраняется в файл некоторое числовое значение из поля ввода, по клику на другую кнопку из файла читается числовое значение и вписывается в поле ввода, в обработчике таймера определено условие показа/скрытия кнопки и в обработчике нажатия клавиши в поле ввода отсекаются только цифры.
Тут все работает.
Сообщение от cotseecа
необходимо создать файл, наполненный различными незначащими данными и только по строго определенному смещению записать полезную информацию (в данном случае значение типа Real) с тем, чтобы потом прочитать из этого файла требуемое значение?
верно.
0
Пишу на Delphi...иногда
 Аватар для cotseec
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
18.12.2014, 19:04
Лучший ответ Сообщение было отмечено FromOutSide как решение

Решение

Цитата Сообщение от FromOutSide Посмотреть сообщение
верно.
как-то так:
Функции чтения и записи
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
...
const
  INFO_OFFSET = 24; // смещение
  FILE_LENGTH = INFO_OFFSET + SizeOf(Real) + 151; // размер всего файла
  PATH_FILE = 'C:\file.save'#0; // путь к файлу
......
// чтение из файла по пути PATH_FILE данных типа Real
// с позиции INFO_OFFSET
function ReadFileWithOffset(var ReadNumber: Real): BOOL;
var
  hFile: DWORD;
  lpBuffer,
  tmp: Pointer;
  lpNumberOfBytesRead: DWORD;
begin
// инициализация
  Result := false;
  lpNumberOfBytesRead := 0;
  lpBuffer := nil;
// открытие файла
  hFile := CreateFile(PChar(PATH_FILE), GENERIC_READ, 0,
                      nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if hFile = 0 then exit; // если файл не открыт, то дальше делать нечего
// читаем из файла данные
  try
// выделяем память под буфер размером смещение + размер читаемых данных
// также можно читать сразу по смещению, указанному в lpOverlapped при асинхронном чтении, но так проще
    GetMem(lpBuffer, INFO_OFFSET + SizeOf(Real));
// читаем в буфер
    if ReadFile(hFile, lpBuffer^, INFO_OFFSET + SizeOf(Real),
                lpNumberOfBytesRead, nil) then
    begin // если чтение успешно
      tmp := lpBuffer;
      inc(PByte(tmp), INFO_OFFSET); // смещаемся в буфере
      ReadNumber := Real(tmp^); // получаем требуемые данные по необходимому смещению
    end;
 
  finally
// освобождаем память под буфер и закрываем файл
    FreeMemory(lpBuffer);
    CloseHandle(hFile);
  end;
// возвращаем результат выполнения (все ок, если число прочитанных байт соответствует требуемому)
  Result := (INFO_OFFSET + SizeOf(Real) = lpNumberOfBytesRead);
end;
 
// запись в файл по пути PATH_FILE размером FILE_LENGTH мусора,
// в позицию INFO_OFFSET записываются данные типа Real
function WriteFileWithOffset(WriteNumber: Real): BOOL;
var
  hFile: DWORD;
  lpBuffer,
  tmp: Pointer;
  lpNumberOfBytesWritten: DWORD;
  i: integer;
begin
// инициализация
  Result := false;
  Randomize;
  lpNumberOfBytesWritten := 0;
  lpBuffer := nil;
// создание файла
  hFile := CreateFile(PChar(PATH_FILE), GENERIC_WRITE, 0,
                      nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
  if hFile = 0 then exit; // если файл не создан, то дальше делать нечего
// заполнение файла мусором
  try
// выделяем память под буфер (если размер файла большой, то лучше выделять кусками и также записывать)
    GetMem(lpBuffer, FILE_LENGTH);
// заполняем буфер мусором, при требуемом смещении записываем необходимые данные
    tmp := lpBuffer;
    i := 0;
    while i <= FILE_LENGTH do
    begin      
      if i = INFO_OFFSET then // достигли требуемого смещения
      begin
        Real(tmp^) := WriteNumber;
        inc(PByte(tmp), SizeOf(Real));
        inc(i, SizeOf(Real));
      end else // заполняем побайтно мусором
      begin
        byte(tmp^) := Random($FF + 1);
        inc(PByte(tmp));
        inc(i);
      end;
    end;
// записываем в файл, результат операции неважен
    WriteFile(hFile, lpBuffer^, FILE_LENGTH, lpNumberOfBytesWritten, nil);
  finally
// освобождаем память под буфер и закрываем файл
    FreeMemory(lpBuffer);
    CloseHandle(hFile);
  end;
// возвращаем результат выполнения (все ок, если число записанных байт соответствует требуемому)
  Result := (lpNumberOfBytesWritten = FILE_LENGTH);
end;
1
禁止
 Аватар для FromOutSide
13 / 11 / 2
Регистрация: 04.09.2014
Сообщений: 230
20.12.2014, 09:28  [ТС]
Спасибо. Жаль что сразу не смогу применить эти коды. Чуть попозже отпишусь. Но чувствую тут все должно работать. еще раз спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.12.2014, 09:28
Помогаю со студенческими работами здесь

Работа с файлами
Код предтавленный ниже, работает как надо... т оесть открывает екзешник ShellExecute(Handle, 'open','file.exe',...

Работа с файлами архиве.
Товарищи. Я только начал осваивать делфи, и для тренировки, решил написать небольшую утилитку для игры(DCS). Такой вопрос: как можно...

работа с файлами и каталогами!
добрый день!подскажите как можно сравнить фотографии между собой по битно, находящиеся в папке?

Работа с INI файлами
ПРИВЕТСТВУЮ уважаемый читатель!!!))). У меня такая проблема нужно сделать чтоб из ини файла выставлялись значения минимум и максимум для...

Работа с файлами и числами
помогите пожайлуста решить плиз создать текстовый файл и сохранить в фале целые числа, организованные в одну строку. Составить...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru