Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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,882
По умолчанию

Думаю подойдёт так
Код:
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,426
По умолчанию

А вам интернет и не нужен вообще. Откройте справку 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,426
По умолчанию

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

Цитата:
Сообщение от 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 Кб, 6 просмотров)
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,804
По умолчанию

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц



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