AssignFile есть проблема
Модератор: Модераторы
-
DiZeLProger
- незнакомец
- Сообщения: 8
- Зарегистрирован: 29.05.2017 07:41:32
AssignFile есть проблема
Доброго времени!
Случилась интересная вещь...
Каждый раз при запуске моего приложения, программа должна пересоздать 1 файлик в системе. Написал код с использованием AssignFile, в принципе всё работает, файлик пересоздаётся, инфа в файле верная, но файл оказался не того формата который нужно!!!(обнаружил случайно).
Файл получился в формате Mac, а мне нужно чтоб он был в стандартном для unix систем формате. Сейчас чтобы это сделать мне приходится открывать его через nano и пересохранять.
Форумчане, внимание вопрос!
Как сделать так чтоб файл сохранялся в нужном формате?
З.Ы.
ОС: Linux
Дистр: Debian9
Lazarus: 1.6.2
FPC: 3.0.0
Случилась интересная вещь...
Каждый раз при запуске моего приложения, программа должна пересоздать 1 файлик в системе. Написал код с использованием AssignFile, в принципе всё работает, файлик пересоздаётся, инфа в файле верная, но файл оказался не того формата который нужно!!!(обнаружил случайно).
Файл получился в формате Mac, а мне нужно чтоб он был в стандартном для unix систем формате. Сейчас чтобы это сделать мне приходится открывать его через nano и пересохранять.
Форумчане, внимание вопрос!
Как сделать так чтоб файл сохранялся в нужном формате?
З.Ы.
ОС: Linux
Дистр: Debian9
Lazarus: 1.6.2
FPC: 3.0.0
-
LearnMagic
- новенький
- Сообщения: 66
- Зарегистрирован: 10.11.2016 22:13:38
Отсутствует часть необходимой информации
1. Файл текстовый или бинарный
2. Каким образом осуществляется запись.
Мой хрустальный шар, подсказывает, что нужно сформировать строку в соотвествующем формате и записать её. При необходимости в начале файла добавить сигнатуру
BOM - маркер последовательнсти байтов
1. Файл текстовый или бинарный
2. Каким образом осуществляется запись.
Мой хрустальный шар, подсказывает, что нужно сформировать строку в соотвествующем формате и записать её. При необходимости в начале файла добавить сигнатуру
BOM - маркер последовательнсти байтов
-
DiZeLProger
- незнакомец
- Сообщения: 8
- Зарегистрирован: 29.05.2017 07:41:32
LearnMagic
Файл текстовый.
Всё просто и без наворотов
Файл текстовый.
Код: Выделить всё
...
// формирование инфы файла
...
AssignFile(f, ПУТЬ);
{$I-}
rewrite(f);
{$I+}
if IOResult<>0 then
exit;
Write(f, ИНФА);
CloseFile(f)
Всё просто и без наворотов
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
В вашем коде символы переноса строка внутри переменной/переменных "ИНФА". Поэтому все равно инфы мало.
Либо может надо было записать так?
В таком виде программа будет делать переносы строка в нужном формате для данной ОС
Либо может надо было записать так?
WriteLn(f, ИНФА);
В таком виде программа будет делать переносы строка в нужном формате для данной ОС
-
DiZeLProger
- незнакомец
- Сообщения: 8
- Зарегистрирован: 29.05.2017 07:41:32
Ichthyander писал(а):WriteLn(f, ИНФА);
В таком виде программа будет делать переносы строка в нужном формате для данной ОС
Разбил инфу по строкам и записывал в файл через WriteLn, не помогло, но потом вернул как было и вместо символа #13 поставил #13#10 (вспомнил про CRLF), тоже не помогло, в итоге оставил только #10 и всё стало гуд!!!
Мне интересно, в какой доке об этом написано!
Ichthyander спасибо за указание направления, я бы ещё долго мучился и искал в чём трабла.
Кстати пробовал создавать файл используя StringList, тоже не помогло.
З.Ы.
Файл состоит в 90% из констант, остальные 10 берутся из ini файла
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Если приходится вкладывать перенос строки в строковую переменную, я всегда использую константу LineEnding, в остальных случаях, правильная записать переносов строк ложится на компоненты (TStringList и т.д.). Странно, откуда и почему у Вас с переносами вдруг проблемы стали появляться
-
DiZeLProger
- незнакомец
- Сообщения: 8
- Зарегистрирован: 29.05.2017 07:41:32
LineEnding = #10, я и забыл про эту константу.
-
LearnMagic
- новенький
- Сообщения: 66
- Зарегистрирован: 10.11.2016 22:13:38
DiZeLProger писал(а):...Мне интересно, в какой доке об этом написано!
http://wiki.freepascal.org/End_of_Line
DiZeLProger писал(а):Файл состоит в 90% из констант, остальные 10 берутся из ini файла
С этого места подробнее: кодировка констант и ini файла
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
DiZeLProger писал(а):LineEnding = #10, я и забыл про эту константу.
Точнее при компиляции в Windows #10#13, в Linux #10.
А почему именно так файл писать? Такой вариант не подходит? Тут всё учитывается автоматически...
Добавлено спустя 2 минуты 44 секунды:
upd
ага вижу уже пробовали...
Добавлено спустя 1 минуту 42 секунды:
Но всё равно можно указать после создания:
Код: Выделить всё
program StrList;
{$mode objfpc}
uses
Classes, SysUtils;
var
Str: TStringList;
begin
Str := TStringList.Create;
Str.Add('ИНФА');
Str.SaveToFile(ПУТЬ);
Str.Free;
end.Добавлено спустя 2 минуты 44 секунды:
upd
ага вижу уже пробовали...
Добавлено спустя 1 минуту 42 секунды:
Но всё равно можно указать после создания:
Код: Выделить всё
Str.LineBreak:=нужный код бряка;
tema
Вы не поняли, у человека ИНФА - это не набор символов, а сборка различных данных, внутри которой стоят неверные символы переноса строки. Оттого и все проблемы были.
Вы не поняли, у человека ИНФА - это не набор символов, а сборка различных данных, внутри которой стоят неверные символы переноса строки. Оттого и все проблемы были.
