Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.11;
Скачать: CL | DM;

Вниз

Проблема открытия файла   Найти похожие ветки 

 
Гость...   (2005-06-13 11:33) [0]

Hello ALL!
Такая вот проблема возникла, никак не могу решить:
есть файл, например 1.mid. Открываю его в своей проге таким образом:

procedure TForm1.XPButton1Click(Sender: TObject);
var
 Buffer: PChar;
 Stream: TFileStream;
 Size:   LongInt;
begin
 Stream := TFileStream.Create("1.mid", fmOpenRead);
 try
   Size := Stream.Size;
   GetMem(Buffer, Size);
   try
     Stream.Read(Buffer[0], Size);
     Memo1.Lines.Text := Buffer;
   finally
     FreeMem(Buffer);
   end;
 finally
   Stream.Free;
 end;
end;

но в TMemo оказывается только первые 4 символа заголовка midi файла "MThd". Buffer пробовал брать string - все равно ничего не получается. Также и с другими файлами, но не со всеми. Помогите. Мне надо, чтобы я мог искать в файлах. Не обязательно даже, чтобы юзер мог видеть.


 
ferr ©   (2005-06-13 11:40) [1]

там 0 символ наверное. Мемо тут не поможет


 
Anatoly Podgoretsky ©   (2005-06-13 11:40) [2]

Файл же не текстовый. Посмотри, что в Buffer[4]
Кроме того Read это функция, а не процедура!


 
Гость...   (2005-06-13 11:48) [3]

так мне надо просто скопировать участок из этого файла в string


 
Anatoly Podgoretsky ©   (2005-06-13 11:50) [4]

Гость...   (13.06.05 11:48) [3]
Тогда почему используешь PChar, а речь ведешь про string


 
Гость...   (2005-06-13 11:51) [5]

и так я тоже пробовал:

procedure TForm1.Button2Click(Sender: TObject);
var
 Buffer: string;
 Stream: TFileStream;
begin
 Stream := TFileStream.Create("unit1.pas", fmOpenRead);
 try
   SetLength(buffer, Stream.Size);
   Stream.Read(Buffer[1], Stream.Size);
   Memo1.Lines.Text := Buffer;
 finally
   Stream.Free;
 end;
end;


 
Гость...   (2005-06-13 11:52) [6]

может я не правильно выражаюсь, но мне надо открыть файл "как есть", т.е. в бинарном режиме


 
ferr ©   (2005-06-13 12:01) [7]

Тебе два раза ясно ответили на 4-ой позиции нулевой символ, означающий для текста конец строки.


 
Гость...   (2005-06-13 12:03) [8]

а как тогда быть, если мне надо весь текст из файла занести в string. Может можно как-то заменять нулевой символ на "пробел"?


 
ferr ©   (2005-06-13 12:06) [9]

Можно. А что надо то?


 
Anatoly Podgoretsky ©   (2005-06-13 12:06) [10]

Гость...   (13.06.05 12:03) [8]
Еще раз, Read это функция!!!!!!!!


 
Плохиш ©   (2005-06-13 12:07) [11]

>Гость...   (13.06.05 12:03) [8]

Твой файл не является текстовым, как тебе уже много раз сказали/намекнули.


 
Гость...   (2005-06-13 12:08) [12]

Мне надо в файле найти определенную строку ~4-5 символов, затем копировать содержимое этого файла с начала этой строки и кончая +10 символов в новый файл


 
Гость...   (2005-06-13 12:10) [13]

//Anatoly Podgoretsky ©   (13.06.05 12:06) [10]
а возвращает она integer. и че мне с ней делать?


 
Anatoly Podgoretsky ©   (2005-06-13 12:12) [14]

Гость...   (13.06.05 12:08) [12]
POS. Copy


 
Anatoly Podgoretsky ©   (2005-06-13 12:12) [15]

Гость...   (13.06.05 12:10) [13]
Начинает утомлять.


 
Гость...   (2005-06-13 12:13) [16]

>Anatoly Podgoretsky ©   (13.06.05 12:12) [14]
ну так а как мне достать из файла string??????


 
ferr ©   (2005-06-13 12:14) [17]

А причём здесь Memo?


 
Гость...   (2005-06-13 12:14) [18]

ну это я просто, чтоб видеть, че я достаю. Забудьте про memo. Оно мне не надо.


 
Anatoly Podgoretsky ©   (2005-06-13 12:18) [19]

Гость...   (13.06.05 12:13) [16]
Stream.Read(Buffer[1], Stream.Size);


 
Гость...   (2005-06-13 12:20) [20]

>Anatoly Podgoretsky ©   (13.06.05 12:18) [19]
я так тоже делал. Т.е. при Memo.text:=buffer в memo строка обрезается?


 
ferr ©   (2005-06-13 12:21) [21]

Строки тут вообще не нужны. ИМХО.


 
Anatoly Podgoretsky ©   (2005-06-13 12:22) [22]

Напоминаю, это функция, а не процедура.


 
Гость...   (2005-06-13 12:23) [23]

хорошо, тогда почему после Stream.Read(Buffer[1], Stream.Size) SizeOf(Buffer) = 4?


 
ferr ©   (2005-06-13 12:23) [24]


> Т.е. при Memo.text:=buffer в memo строка обрезается?

Да, она преобразуется к родному PChar, а он ноликом оканчивается.


 
Anatoly Podgoretsky ©   (2005-06-13 12:27) [25]

Гость...   (13.06.05 12:23) [23]
Он такой и до Stream.Read


 
Гость...   (2005-06-13 12:28) [26]

чет я ниче не пойму. А как мне ВЕСЬ "текст" из файла в string переденуть?


 
ferr ©   (2005-06-13 12:32) [27]

[23]:SizeOf(Buffer)=SizeOf(Pointer)

> чет я ниче не пойму. А как мне ВЕСЬ "текст" из файла в
> string переденуть?

[5].


 
Anatoly Podgoretsky ©   (2005-06-13 12:33) [28]

Ндать, жалко правила форума не позволяют персонально прокатываться по интеллекту.


 
Гость...   (2005-06-13 12:35) [29]

Спасибо всем. Вроде разобрался.

>Anatoly Podgoretsky ©   (13.06.05 12:33) [28]
да просто я неправильно выразился в начале. ;)


 
Anatoly Podgoretsky ©   (2005-06-13 12:38) [30]

Задавать вопросы твоя задача, как задашь так и получишь.



Страницы: 1 вся ветка

Текущий архив: 2005.07.11;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.032 c
11-1101196866
mdw
2004-11-23 11:01
2005.07.11
Нужен KOLICS


1-1119345488
alexa
2005-06-21 13:18
2005.07.11
Иконка на понели задач


1-1118732313
Dummes
2005-06-14 10:58
2005.07.11
Функции Overload.


9-1109414441
Xerx
2005-02-26 13:40
2005.07.11
Помогите реализовать алгоритм


1-1118440251
KOLIG
2005-06-11 01:50
2005.07.11
Упаковка файлов