Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> доступ к открытому файлу 
:(
    Опции темы
frodo
Дата 18.9.2008, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 4.4.2008

Репутация: нет
Всего: 1



Добрый день программисты! возникла проблемка в программе написанной на c++ генерируются числа(каждые пол секунды, или меньше) и записываются в файл, так вот нужно в приложении написанном на delphi считывать эти числа и выводить их ну допустим в listbox1
организовал такой код
Код

var
  b: string[155];
begin
  with TFileStream.create('D:\Example\potok\release\file.txt', fmShareDenyNone) do
  try
    read(b,25);
listbox1.Items.Add(b);
  finally
    Free;
  end;

но нужно выводить в listbox полностью весь файл, а он выводит тока 25 символов, максимум ставится 256! вот такой вопросик!


Это сообщение отредактировал(а) frodo - 18.9.2008, 11:21
PM MAIL   Вверх
morpheyushka
Дата 18.9.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

Репутация: 3
Всего: 8



Цитата(frodo @  18.9.2008,  11:19 Найти цитируемый пост)
а он выводит тока 25 символов

так у тебя делфийским языком написано
Код

read(b,25);

я бы цикл поставил, но опять таки - как числа заносятся: новое число с новой строчки или через разделитель?


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
frodo
Дата 18.9.2008, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 4.4.2008

Репутация: нет
Всего: 1



Цитата(morpheyushka @ 18.9.2008,  11:34)
я бы цикл поставил, но опять таки - как числа заносятся: новое число с новой строчки или через разделитель?

заносятся с новой строчки!!!а как цикл то, я даже к файлу этому немогу обратиться через while not eof  переменной файла нету
PM MAIL   Вверх
Данкинг
Дата 18.9.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Цитата(frodo @  18.9.2008,  12:39 Найти цитируемый пост)
переменной файла нету 

А в чём проблема это организовать?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
frodo
Дата 18.9.2008, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 4.4.2008

Репутация: нет
Всего: 1



Цитата(Данкинг @ 18.9.2008,  11:49)
А в чём проблема это организовать?

если создавать переменную типо f:textfile мне нужно связать ее с файлом assignfile(f,"filename"); а так я сделать несмогу так как файл у меня занят другой программой!!!
или я что то недопонял?
PM MAIL   Вверх
CodeMonkey
Дата 18.9.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



...ставим курсор на TFileStream, жмём F1 и не задаём таких вопросов...


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
ama_kid
Дата 18.9.2008, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 15
Всего: 95



Цитата(frodo @  18.9.2008,  12:39 Найти цитируемый пост)
а как цикл то, я даже к файлу этому немогу обратиться через while not eof  переменной файла нету 
TFileStream.Seek(0,soFromEnd) вернет текущий размер файла. На этот размер организовывай буфер и считывай за один раз (не забыв перевести указатель на начало)...



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
frodo
Дата 18.9.2008, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 4.4.2008

Репутация: нет
Всего: 1



Цитата(CodeMonkey @ 18.9.2008,  11:56)
...ставим курсор на TFileStream, жмём F1 и не задаём таких вопросов...

после на жатия на F1 
TFileStream enables applications to read from and write to a file on disk.

Unit

Classes

Description

Use TFileStream to access the information in disk files. TFileStream will open a named file and provide methods to read from or write to it. If an application already has a handle to the file, opened in the appropriate mode, use THandleStream instead.


не вы такие умные help поюзал уже, но увы чет не то!

Добавлено через 8 минут
Цитата(ama_kid @ 18.9.2008,  12:01)
TFileStream.Seek(0,soFromEnd) вернет текущий размер файла. На этот размер организовывай буфер и считывай за один раз (не забыв перевести указатель на начало)...

вот ошибочка выходит!
[Error] Unit1.pas(39): This form of method call only allowed for class methods

Это сообщение отредактировал(а) frodo - 18.9.2008, 12:09
PM MAIL   Вверх
CodeMonkey
Дата 18.9.2008, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(frodo @  18.9.2008,  12:02 Найти цитируемый пост)
после на жатия на F1 

Ну, товарищ! smile 

Для кого наверху ссылки "Properties", "Members"/"Methods"?
Изучайте свойства и методы объекта, если уж не хотите в книжку заглянуть.

По тому же Read можно там прочитать:
Цитата
Use Read to read data from the resource associated with the handle stream when the number of bytes in the file is not known. Read transfers up to Count bytes from the resource, starting at the current position, and then advances the current position in the resource by the number of bytes actually transferred. Read returns the number of bytes actually transferred, which may be less than Count if the end of file marker is encountered.


Хотите в стиле цикла с EOF - используйте всякие Position, Size, Seek.

P.S. Я бы ещё рекомендовал Уроки от АП

Добавлено через 3 минуты и 2 секунды
Цитата(frodo @  18.9.2008,  12:02 Найти цитируемый пост)
вот ошибочка выходит!

А потому что не надо копировать в лоб, не понимая, что вам говорят. 
На самом деле, вам сказали "используй метод метод Seek", а не "копируй код слово-в-слово".
Seek - метод класса TFileStream. Ну и где у вас объект класса TFileStream? С учётом того, что Read - тоже метод класса TFileStream?

Добавлено через 8 минут и 18 секунд
Цитата(frodo @  18.9.2008,  11:55 Найти цитируемый пост)
если создавать переменную типо f:textfile мне нужно связать ее с файлом assignfile(f,"filename"); а так я сделать несмогу так как файл у меня занят другой программой!!!

Сможете вы открыть файл или нет - зависит от двух факторов:
1). Режима открытия, в котором открыла/создала файл программа, что в него пишет.
2). Режима открытия, с которым пытаетесь открыть файл лично вы. В свою очередь, это зависит:
  а). Для TFileStream - от параметров, передаваемых в конструктор объекта.
  б). Для файлов в стиле Паскаль (AssignFile/Reset и т.п.) - от переменной FileMode. Опять же - смотрите сравку, там всё написано.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
morpheyushka
Дата 18.9.2008, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

Репутация: 3
Всего: 8



если сильно хочется через файловые переменные - вот тебе код:
Код

var
  TF: TextFile;
  S: String;
begin
  Form8.KeyPreview := true;
  ListBox1.Clear;
  AssignFile(TF, 'D:\Example\potok\release\file.txt');
  Reset(TF);
  while not EOF(TF) do
    begin
      ReadLn(TF, S);
      ListBox1.Items.Add(S);
    end;
  CloseFile(TF);
end;



--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
frodo
Дата 18.9.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 4.4.2008

Репутация: нет
Всего: 1



Всем спасибо!!! организовал по другому!!!! вариант по которому шел оказался слишком замороченным(для меня покрайне мере), нашел более другой способ!

Добавлено через 1 минуту и 43 секунды
Цитата(morpheyushka @ 18.9.2008,  12:42)
если сильно хочется через файловые переменные - вот тебе код:
Код

var
  TF: TextFile;
  S: String;
begin
  Form8.KeyPreview := true;
  ListBox1.Clear;
  AssignFile(TF, 'D:\Example\potok\release\file.txt');
  Reset(TF);
  while not EOF(TF) do
    begin
      ReadLn(TF, S);
      ListBox1.Items.Add(S);
    end;
  CloseFile(TF);
end;

мда читай первое мое сообщение!!!ФАЙЛ ЗАНЯТ другим процессом!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1170 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.