Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 27.11.2011, 12:34   #1
drknn
Пользователь
 
Аватар для drknn
 
Регистрация: 02.09.2007
Сообщений: 51
По умолчанию Работа с файлами. Общий доступ

Мне нужно программно открыть текстовый документ, расположенный по заранее известному адресу - открыть для редактирования, ну или полностью заменить его. Насколько я понял из букварей Delphi, другая программа, которая открыла файл, может открыть его в режиме запрета доступа других программ к этому файлу. Значит, прежде чем открывать данный *.txt, нужно проверить, а есть ли у моей программы право его открывать для редактирования? Подскажите пожалуйста, как проверить этот флаг.
Далее. Допустим право редактировать данный файл у моей программы есть. Она его открыла, изменила его и сохранила. НО! Другая программа, открывшая этот файл раньше моей, замешкалась (моя сработала быстрее) и закончила вносить изменения позже, чем моя. В результате она сохранит свои изменения в этом файле, фактически заменив его. Это значит, что инфа, которую внесла моя программа, попросту исчезнет. Отсюда возникает вопрос, как наладить работу моей программы так, чтоб она открывала тот *.txt тогда и только тогда, когда он не открыт ни какой другой программой? И при этом открывала его в режиме, запрещающем другим программам открывать его? Какие команды Delphi для этого используются? И вообще,возможно ли осуществить в коде мною задуманное?

Последний раз редактировалось drknn; 28.11.2011 в 00:03.
drknn вне форума   Ответить с цитированием
Старый 27.11.2011, 13:54   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,855
По умолчанию

Думаю подойдёт так
Код:
var fs : TFileStream;
...
fs := TFileStream.Create('путь_до_файла', fmOpenReadWrite or fmShareExclusive);
//работаем с файлом, см. справку по TFileStream по конкретным командам
freeandnil(fs);
phomm вне форума   Ответить с цитированием
Старый 27.11.2011, 15:34   #3
drknn
Пользователь
 
Аватар для drknn
 
Регистрация: 02.09.2007
Сообщений: 51
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Думаю подойдёт так
Код:
var fs : TFileStream;
...
fs := TFileStream.Create('путь_до_файла', fmOpenReadWrite or fmShareExclusive);
//работаем с файлом, см. справку по TFileStream по конкретным командам
freeandnil(fs);
Ндааа, помнится Флёнов писал что-то такое же в своей "Библии Делфи". Спасибо, буду посмотреть. Жаль в инете не вижу полного описания TFileStream - всё какие-то кусочки, да копирование с чужих рессурсов
drknn вне форума   Ответить с цитированием
Старый 27.11.2011, 15:44   #4
Человек_Борща
МегаМодератор
СуперМодератор
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,444
По умолчанию

А вам интернет и не нужен вообще. Откройте справку delphi и там описание чего угодно, во всей красе. Иногда даже с примерами.

Далее делайте полную копию исходного документа во временную папку ну и работайте с ним. Приоритет будет за вами.
notepad++ так и делает. Исходный док-нт бросает во временную папку и следит за исходным. Если исходный изменился, предлагает юзеру перезагрузить документ, или продолжить изменять тот что во временной папке лежит.

ТС вы заблуждаетесь!
Если вы открыти файл через memo или RichEdit то другая программа сможет только открыть файл НО не изменить его.
При условии что спользуется класс Tstrings(а в этих комонентах он точно есть), видим его LoadFromFile:
Код:
procedure TStrings.LoadFromFile(const FileName: string);
var
  Stream: TStream;
begin
  Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;
Цитата:
Сообщение от Delphi Help
fmShareDenyWrite - Other applications can open the file for reading but not for writing.

Последний раз редактировалось Человек_Борща; 27.11.2011 в 15:55.
Человек_Борща вне форума   Ответить с цитированием
Старый 27.11.2011, 15:47   #5
drknn
Пользователь
 
Аватар для drknn
 
Регистрация: 02.09.2007
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
А вам интернет и не нужен вообще. Откройте справку delphi и там описание чего угодно, во всей красе. Иногда даже с примерами.
Английским не владею.
drknn вне форума   Ответить с цитированием
Старый 27.11.2011, 16:20   #6
Человек_Борща
МегаМодератор
СуперМодератор
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,444
По умолчанию

drknn, ну тогда вас ждут пень-колода и гвозди на каждом шагу.
Человек_Борща вне форума   Ответить с цитированием
Старый 27.11.2011, 18:33   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,855
По умолчанию

Цитата:
Сообщение от drknn
Программирую на MQL4 уже не первую пятилетку
и
Цитата:
Сообщение от drknn
Английским не владею
это, как минимум, дико (хотя и не знаю что за зверь mql4).
Вот Вам ру-источник для начала - http://stfw.ru/page.php?id=4234
Из самого стрима много свойств и методов знать не обязательно, достаточно нескольких, а по остальным - заходите в справку и для каждого свойства/метода в гугле ищете русский источник.
Ещё совет - научитесь поконкретней вопросы ставить - проще помочь Вам будет.

Последний раз редактировалось phomm; 27.11.2011 в 18:38.
phomm вне форума   Ответить с цитированием
Старый 27.11.2011, 20:11   #8
drknn
Пользователь
 
Аватар для drknn
 
Регистрация: 02.09.2007
Сообщений: 51
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
...это, как минимум, дико (хотя и не знаю что за зверь mql4).
Открою Вам правду. Приезжала тут как-то в одну из наших школ девочка из Америки - Штат Айова. Приезжала преподавать детям английский язык - её школа пригласила. По-русски - ни бум-бум. Я в школе "учил" английский. С девушкой пересёкся у друга дома - друг преподаёт классическую гитару и его ученик и пригласил девушку в гости к нему. Контакт с этой девушкой мне показал, что моих знаний английского + применения языка жестов вполне достаточно, чтоб понять друг-друга.
Но технический английский - это совсем не то, что разговорный. Мне как-то попался в руки словаь технического английского. Я открыл статью "mother" и был весьма удивлён, что это слово переводилось как "станина станка". Ни о какой маме и близко небыло упоминания. Поэтому когда заходит речь о чтении программной справки на английском, я честно говорю, что не владею этим языком.

MQL4 - это си-образный язык, предназначенный для программирования торговых роботов. К этому посту я приложил документ всего в 1300 строк программного кода. Распакуйте архив и откройте документ текстовым редактором - получите представление об этом языке и если хотя бы поверхностно знаете С, то многое покажется знакомым.
Вложения
Тип файла: rar Zz_Fibo_2.2.rar (11.2 Кб, 5 просмотров)
drknn вне форума   Ответить с цитированием
Старый 27.11.2011, 20:18   #9
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Ндааа, помнится Флёнов писал что-то такое же в своей "Библии Делфи". Спасибо, буду посмотреть. Жаль в инете не вижу полного описания TFileStream - всё какие-то кусочки, да копирование с чужих рессурсов
Потоки данных.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума   Ответить с цитированием
Старый 27.11.2011, 20:29   #10
rpy3uH
добрый няша
СуперМодератор
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,806
По умолчанию

Во-первых, называем нормально тему
Во-вторых, топикстартёр, ты пишешь много лишнего, первый твой пост в этой теме я смог переварить только с третьего захода. Слишком много букаф на такой простой вопрос
В-третьих, вопрос - боян, легко гуглится, все вопросы снимаются чтением кошерных книжек и статей по Delphi

По теме: юзаем гугль, четвёртая ссылка расскажет почти всё что надо по классу TFileStream

Последний раз редактировалось rpy3uH; 27.11.2011 в 20:39.
rpy3uH вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Общий доступ к внешнему HD nick42 Общие вопросы C/C++ 0 14.10.2011 16:51
Работа с файлами. Произвольный доступ. с++ ahab Помощь студентам 1 17.03.2010 01:51
Работа с книгой имеющей общий доступ в Excel(2003,2007) Fezdipekla Microsoft Office Excel 1 12.03.2010 11:35
Общий доступ и работа с защищенным листом. zakv Microsoft Office Excel 0 22.10.2009 09:18
Общий доступ в интернет HAMMAN Свободное общение 1 06.08.2007 20:41


23:39.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.