|
Основной форум Сюда все проблемы связанные с программированием. |
25.04.2012, 18:54
|
#1
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Создание/запись/чтение файлов
Через блокнот файл выглядит вот так:
hello world
hello world
А через hex редактор:
FFFE680065006C006C006F00090077006F0072006C0064000D000A00
680065006C006C006F00090077006F0072006C0064000D000A00
те в начале файла запись FFFE, и дальше идут буквы 68-h, два нуля снова буква и тд. enter-это,0D000A00
Вопрос как создавать файл и записать побайтно информацию, который выглядел также.
|
(Offline)
|
|
26.04.2012, 20:11
|
#2
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Создание/запись/чтение файлов
Это, как я понял, юникод. Библиотеки для работы с ФС пишут в ASCII, так что нужно составлять таблицу символов юникода (по 2 байта на символ) и вручную побайтно записывать данные. Точно так же побайтно прописывать FFFE и 0D000A00.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо ViNT за это полезное сообщение:
|
|
27.04.2012, 23:21
|
#3
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Ответ: Создание/запись/чтение файлов
Нашёл библиотеку jsr75i. Она запишет байты. Но как быть с юникод, библиотеку сложно написать?
вот и 1000 набежала)
|
(Offline)
|
|
28.04.2012, 00:13
|
#4
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Создание/запись/чтение файлов
Там библиотека не нужна. Заводим два массива, в них вручную прописываем коды символов (в первый массив - первый байт, во второй - второй) естественно, массивы нужно построить так, чтобы индекс соответствовал коду символа ASCII. То есть, например, символ имеет номер N и код AABB, тогда в первом массиве под индексом N должно быть AA, во втором - BB. Дальше все просто
for i := 1 to Length(S)-1 do
begin
jsr_75i.write_byte(b1[ord(GetChar(S,i))]);
jsr_75i.write_byte(b2[ord(GetChar(S,i))]);
end;
Примерно так, от балды написал.
Хотя, наверное есть какой-нибудь алгоритм пересчета из ASCII в юникод, но потом опять же придется результат на байты резать, тоже лишние телодвижения.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.05.2012, 18:39
|
#5
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Ответ: Создание/запись/чтение файлов
Появилась новая проблема. При использовании функций read_byte и reset приложение виснет (jsr75i). Созданный файл нормально создается и читается. Но отрываться никак не может. В чём проблема?
Program write; uses jsr75i; var ofile,i,opnf,byte,ss:integer; s,savedir,hw:string;
Begin //save savedir:='/e:/text.txt'; s:='hello world'; file_create(savedir); ofile:=open_file(savedir); for i:=0 to length(s)-1 do write_byte(ord(GetChar(s,i))); flush; //open opnf:=jsr75i.open_file(savedir); if opnf<>1 then begin setcolor (255,255,255); fillRect(0, 0, getwidth, getheight); setcolor (0,0,0); drawtext('Невозможно откр. файл',0,0); delay(1000); end; jsr75i.reset;
for byte:=0 to jsr75i.file_size(savedir) do begin ss:=jsr75i.read_byte; hw:=hw+ctr(ss); end;
setcolor (255,255,255); fillRect(0, 0, getwidth, getheight); setcolor (0,0,0); drawtext(hw,0,0); delay(5000); End.
|
(Offline)
|
|
06.05.2012, 18:42
|
#6
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Создание/запись/чтение файлов
Вероятно проблема в том, что файл не закрывается после создания, поэтому программа не может его открыть.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.05.2012, 18:59
|
#7
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Ответ: Создание/запись/чтение файлов
Вставил в код:
if opnf<>1 then begin setcolor (255,255,255); fillRect(0, 0, getwidth, getheight); setcolor (0,0,0); drawtext('Невозможно откр. файл',0,0); delay(1000); end;
но похоже открыть может, текст 'Невозможно откр. файл' не выводит.
|
(Offline)
|
|
07.05.2012, 00:28
|
#8
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Создание/запись/чтение файлов
То, что не выводит - во-первых, нет repaint, без него ничего не выведет, во-вторых, если в коде он есть, то может не выводить из-за зависания потока.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.05.2012, 08:19
|
#9
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Ответ: Создание/запись/чтение файлов
Как же я забыл про repaint. Добавил close_file и удалил reset. И заработало
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:09.
|