Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 786

/ вопрос открыт /

Здравствуйте! Создаваемая программа записывает некую информацию в текстовый файл (именно текстовый, запись производится только с помощью writeln), можно ли сделать так, чтобы этот файл был доступен к просмотру и редактированию только из моей программы?

Полушин Сергей Анатольевич Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Полушин Сергей Анатольевич (статус: Посетитель)
Вопрос отправлен: 24 июля 2007, 16:23
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Полушин Сергей Анатольевич!
можно, но открывать надо уже апи функциями.
Например так
var fs:TFileStream;
begin
fs:=TFileStream.create(\'x.txt\',fmShareExclusive+fmCreate);// или заменить на fmOpenReadWrite последний параметр, если файл удалять не надо
fs.write(@(s[1],length(s));//записали строку s
fs.free; - закрыли файл

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 24 июля 2007, 16:40
Оценка за ответ: 5

Комментарий к оценке: Спасибо, принцип более чем понятен

Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 25 июля 2007, 23:05; участников в обсуждении: 4.
Градов Ю.М.

Градов Ю.М. (статус: 8-ой класс), 24 июля 2007, 22:24 [#1]:

Поясните вопрос. Вы пишите, что запись файла должна осуществляться с помощью функции Writeln (только), чтобы потом Вы могли просматривать и редактировать файл только из Вашей программы. Тогда Вам необходимо шифровать файл перед записью, а при чтении его дешифровать. Пишите, попытаюсь помочь.
Dron

Dron (статус: Студент), 24 июля 2007, 22:32 [#2]:

Кстати говоря, всё это заблокирует файл лишь на то время, пока программа будет его использовать, т.е. с того момента, когда она его откроет и до тех пор, пока не закроет. А после этого файл снова станет доступен... Чтобы файл действительно было невозможно редактировать (или хотя бы усложнить эту задачу), его нужно либо шифровать, как указал Градов Ю.М., либо спрятать куда-нибудь, где его будет сложно найти. А лучше - оба метода сразу.
Конечно, если речь шла только о том моменте, пока программа его использует, вопрос закрыт.
С уважением.
Полушин Сергей Анатольевич

Полушин Сергей Анатольевич (статус: Посетитель), 25 июля 2007, 00:15 [#3]:

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

Полушин Сергей Анатольевич (статус: Посетитель), 25 июля 2007, 00:19 [#4]:

как я понял файл нужно шифровать, тогда сообщайте как, будем оценивать ваши ответы
Вадим К

Вадим К (статус: Академик), 25 июля 2007, 11:11 [#5]:

Зачем блокировать файл на все время работы? что бы враг не догадался, что вы там пишете? Помните, были приценденты, кодга за скрытые/недоступные файлы компании имели большие неприятности. Например достаточно вспомнить последний случай с Sony.
По при особом желании заблокировать файл можно поступить так. Пишеться сервис, который открывает файл и отдаст только когда об этом попросит своя программа.
Если владеете С++, то можно и драйвер для файловой системы написать.
Галочка "подтверждения прочтения" - вселенское зло.
Градов Ю.М.

Градов Ю.М. (статус: 8-ой класс), 25 июля 2007, 23:05 [#6]:

unit Q786;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

type
ECryptError = class(Exception);

var
Form1: TForm1;
F: TextFile;

const
csCryptFirst = 20;
csCryptSecond = 230;
csCryptHeader = \'Crypted\';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var St: string;
function UnCryptString(Str:String):String;
var i, clen : Integer;
begin
clen := Length(csCryptHeader);
SetLength(Result, Length(Str)-clen);
if Copy(Str,1,clen)<>csCryptHeader then
raise ECryptError.Create(\'Дешифрация не возможна!!!\');
for i := 1 to Length(Str)-clen do
begin
if (i) mod 2 = 0 then
Result[i] := Chr(Ord(Str[i+clen]) xor csCryptFirst)
else
Result[i] := Chr(Ord(Str[i+clen]) xor csCryptSecond);
end;
end;
begin
if OpenDialog1.Execute then
begin
Memo1.Clear;
AssignFile(F, OpenDialog1.FileName);
Reset(F);
While not Eof(F) do
begin
Readln(F,St);
Memo1.Lines.Add(UnCryptString(St));
end;
CloseFile(F);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var St: string;
j: integer;
function CryptString(Str:String):String;
var i,clen : Integer;
begin
clen := Length(csCryptHeader);
SetLength(Result, Length(Str)+clen);
Move(csCryptHeader[1], Result[1], clen);
For i := 1 to Length(Str) do
begin
if i mod 2 = 0 then
Result[i+clen] := Chr(Ord(Str[i]) xor csCryptFirst)
else
Result[i+clen] := Chr(Ord(Str[i]) xor csCryptSecond);
end;
end;
begin
if SaveDialog1.Execute then
begin
AssignFile(F,SaveDialog1.FileName);
Rewrite(F);
for j:=1 to Memo1.Lines.Count do
begin
Writeln(F,CryptString(Memo1.Lines.Strings[j]));
end;
CloseFile(F);
end;
end;

end.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:56
Выполнено за 0.02 сек.