|
|
|
|
$file = fopen ("data.txt","a+");
if ( $file )
{
rewind ($file);
$c = fread ($file, 2);
$num1 = fread ($file, 1);
$num2 = fread ($file, 1);
$num3 = fread ($file, 1);
#.....изменяю эти 3 переменые
rewind($file);
fputs ($file, "##".$num1.$num2.$num3);
fclose ($file);
}
|
В итоге. В текстовом файле сначала идут старые переменные ,а затем новые. А надо вписать новые переменные в начало. В чем проблема?!
То есть необходимо -
сначала файл - ##123
затем файл - ##567##123 | |
|
|
|
|
|
|
|
для: anonymous
(28.07.2008 в 01:34)
| | Вставить данные в середину файла (без того, чтобы при этом перезаписать поверх уже имеющиеся данные) Вы не можете. Можете лишь дописать в хвост.
Это не зависит ни от модификаторов открытия файла ни от типов файловых систем, насколько мне известно. | |
|
|
|
|
|
|
|
для: Trianon
(28.07.2008 в 02:10)
| | Это печально. Крайне печально.
Неужели нет никакого способа? | |
|
|
|
|
|
|
|
для: anonymous
(28.07.2008 в 02:17)
| | Походу такие правила) Читать файл можно только сначала, ДОписывать в файл можно только в конец.
Единственный вариант в вашем случае:
1. считать файл, запомнить что в нем было, сохранить в переменную,
2. записать в файл новые данные, удалив при этом старые,
3. дописать то что в нем было. | |
|
|
|
|
|
|
|
для: pav1uxa
(28.07.2008 в 15:59)
| | Все верно. Так и реализовал. | |
|
|
|
|
|
|
|
для: pav1uxa
(28.07.2008 в 15:59)
| | >Походу такие правила) Читать файл можно только сначала,
Это совсем не так. читать файл можно в произвольных местах. Нужно лишь знать позицию, с которой читать. Правда, ОС все операции будет оптимизировать из расчета последующего чтения вперед.
>ДОписывать в файл можно только в конец.
Это верно.
>Единственный вариант в вашем случае:
>1. считать файл, запомнить что в нем было, сохранить в переменную,
>2. записать в файл новые данные, удалив при этом старые,
>3. дописать то что в нем было.
Соответственно и вариант не единственный.
В принципе, в некоторых ситуациях можно дописывать данные в хвост, а файл читать в от конца к началу. | |
|
|
|
|
|
|
|
для: anonymous
(28.07.2008 в 02:17)
| | >Это печально. Крайне печально.
>Неужели нет никакого способа?
Файл у вас большого размера достигает? Если файл маленький (в районе полумегабайта) можно перед записью читать его содержимое, разбив на массив (при помощи функции file) добавить в начало массива новую запись, а потом записать массив (предварительно объединив его в строку при помощи функции implode()) в файл (перезаписав, все, что там имеется). | |
|
|
|
|
|
|
|
для: anonymous
(28.07.2008 в 01:34)
| |
<?
$file = fopen("file.txt","w+");
fwrite ($file, "111\n");
fwrite ($file, "222");
fclose($file);
?>
|
А в файл записывает 111?222
где на месте "?" квадратик.
Как правильно записать перенос строки в файл? | |
|
|
|
|
|
|
|
для: anonymous
(29.07.2008 в 21:20)
| | Блокнот Windows не понимает UNIX-перевод строки \n, ему нужен Windows-перевод строки \r\n
<?
$file = fopen("file.txt","w+");
fwrite ($file, "111\r\n");
fwrite ($file, "222");
fclose($file);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(30.07.2008 в 14:16)
| | Ну почему, echo "as\nas\nas";, а потом просмотреть исходный код - в Блокноте запись будет столбиком. | |
|
|
|
|
|
|
|
для: sim5
(30.07.2008 в 14:28)
| | Под Windows, да. А теперь гляньте, поведение скрипта под UNIX http://www.softtime.ru/get.php. Это связано с тем, что при записи результирующего HTML-кода включается текстовый режим t, вместо бинарного b. Текстовый режим автоматически подставляет перевод строки, принятый для операционной системы (В Windows - \r\n, в FreeBSD - \n). | |
|
|
|
|
|
|
|
для: cheops
(30.07.2008 в 14:16)
| | Ок, помогло, спасибо.
К слову, в C++
printf( f, "asdfasdf\nasdfasdf");
|
запишется нормально - с переносом строки, без использования \r\n. В чем дело? | |
|
|
|
|
|
|
|
для: anonymous
(31.07.2008 в 00:24)
| | Опять же дело в операционных системах - под Windows и ваш код будет в Блокноте нормально открываться, однако, если C++-программа будет выполняться в UNIX-среде. Будет та же петрушка. Бинарный и текстовый режимы записи файлов по сути из C и идут. Файлы - это компетенция операционной системы, поэтому языки пытаются использовать по-максимуму особенности каждой конкретной операционной системы.
PS Проблема в том, что в качестве операционной системы на клиентских машинах мы предпочитаем Windows, а на серверах UNIX-подобные операционные системы. Отсюда ноги и растут, когда ваша программа или скрипт работают в одной среде, все нормально. А когда Блокнот и скрипт в разных - начинаются проблемы. Вообще говоря это свойство блокнота - его так запрограммировали, все нормальные редакторы, понимают любые переводы строк. | |
|
|
|
|
|
|
|
для: cheops
(01.08.2008 в 14:37)
| | Ок, внятное обьяснение, спасибо. | |
|
|
|