C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Запись в файлы, Запись в файлы
term
Отправлено: 29.08.2004, 20:07


Не зарегистрирован







В локальной сети есть 6 компьютеров. На каждом компе мое приложение. Ему требуется вести log, т.е. модифицировать файл на сервере.(На серваке файл каждая программа при определенном действии пользователя открывает/закрывает/читает/пишет этот файл)
Проблемы следующие:
1 Как указать путь к этому .txt файлу с компьютера-клиента?
2 Не могу испробвать на пратике(пишу дома), что будет, если две программы одновременно попытаются открыть файл? (Если все повиснет — как с этим бороться?)

Konstantine
Отправлено: 30.08.2004, 08:41


Мастер участка

Группа: Модератор
Сообщений: 545



Лучше сделай клиент-серверное приложение. Этим ТЫ избавишься сразу от кучи багов, которые проявятся и не нада будет расшаривать директорию с логом.
AVC
Отправлено: 30.08.2004, 08:46


Ветеран

Группа: Модератор
Сообщений: 1583



1. Так же, как если бы вам было нужно открыть его блокнотом на стороне клента.
2. Второе приложение получит код ошибки.

По моему мнению лучше сделать сервер и посылать ему команды, например то TCP.
AVC
Отправлено: 30.08.2004, 08:47


Ветеран

Группа: Модератор
Сообщений: 1583



Малость опоздал.
Konstantine
Отправлено: 30.08.2004, 08:51


Мастер участка

Группа: Модератор
Сообщений: 545



:-)
term
Отправлено: 09.09.2004, 17:43


Не зарегистрирован







уточните как указать путь, нечто вроде
192.0.0.1\D:\Temp\temp.txt где 192.0.0.1 — IP адрес сервака ?

если файл уже открыт, и его пытаются открыть еще раз, то fopen() вернет NULL, а что будет если ОДНОВРЕМЕННО две программы попытаются открыть файл, вернется ли NULL?

плиз поясните функцию fsopen(), что значит "открывает файл совместного доступа"?
Konstantine
Отправлено: 10.09.2004, 08:00


Мастер участка

Группа: Модератор
Сообщений: 545



Нет!!!

На сервере вешаешь прогу, которая объявляет серверный сокет (ServerSocket) и принимает данные от подлюченых клиентов. Если нада — записывай в файл.

На клиенте прога должна НЕ модифицировать файл на сервере, а подключится к ServerSocket (с пом. ClientSocket) и передать ему то, что нада вписАть в файл.

Две программы не могут ОДНОВРЕМЕННО открыть файл.

Что касается записи на сервере, то если у тебя текстовая информация, то Я рекомендую пользоваться TStringList: при считывании StringList1->LoadFromFile("file_name") а при записи — StringList1->SaveToFile("file_name"). только не забудь прои указании пути к файлу делать \ двойным.
Guest
Отправлено: 10.09.2004, 09:20


Не зарегистрирован







QUOTE (Konstantine @ писал)
Две программы не могут ОДНОВРЕМЕННО открыть файл

Запросто.
(Но не во всех случаях)
Konstantine
Отправлено: 10.09.2004, 09:38


Мастер участка

Группа: Модератор
Сообщений: 545



ОДНОВРЕМЕННО дать OPEN??? чтоб обоим дало false??? разве что уже до этого этот файл открыла третья прога!!!

Вернуться в Вопросы программирования в C++Builder