Автор Тема: Открытие файла на чтение и запись???  (Прочитано 3285 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн C++

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 221
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Открытие файла на чтение и запись???
« : 17 Августа 2002, 15:16:59 »
Есть кусок кода:

open(STATS,"+<$stats_file") or die;
binmode(STATS);
flock(STATS,2);
while(read(STATS,$data,$rec_size))
  {
     $a=unpack($strTemplate,$data);
     if($a[1]==$id)
     last
  {
      if(seek(STATS,-$rec_size,1))
         { print STATS pack($strTemplate,@a);
                flock(STATS,8); close(STATS);
         }

Он должен прочитать данные из файла, изменить нужное и записать обратно в ту же позицию. Но ничего этого не происходит...
Когда файл открываю в режиме "+>", то он попросту стирает все данные из файла. А в приведенном выше варианте данные  даже не считываются.
Что я не правильно делаю?
Спасибо

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Открытие файла на чтение и запись???
« Ответ #1 : 17 Августа 2002, 18:16:54 »
C++, для начала - если ты хочешь обновить файл, используй \'+<\'.
Цитировать
flock(STATS,8);
- такого вовсе делать не стоит, просто сделай close(STATS); - блок будет снят автоматом.
Окей, теперь посмотрим... ага..., пожалуй я бы сделал это так:

open(STATS,"+<$stats_file") or die;
binmode(STATS);
flock(STATS,2);
while(read(STATS,$data,$rec_size)){
  # делаем с $data все чот хотим
}
seek(STAT,0,0); # - в начало файла;
truncate(STAT,0); # - рубим файл под ноль;
print STAT "Anything\\n";
close(STAT);

И все! Удачи.

Оффлайн C++

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 221
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Открытие файла на чтение и запись???
« Ответ #2 : 17 Августа 2002, 21:35:17 »
Цитировать
для начала - если ты хочешь обновить файл, используй \'+<\'.

Я его так и открываю, но только он мне не дает с него читать почему-то...
Не понял, а зачем файл рубить под ноль??? Мне данные находящиеся в нем нельзя убивать....

Оффлайн C++

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 221
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Открытие файла на чтение и запись???
« Ответ #3 : 17 Августа 2002, 22:57:59 »
Все, решение проблемы найдено... На самом деле и проблемы то не было, всему виной моя невнимательность.
З.Ы. Всем спасибо.

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Открытие файла на чтение и запись???
« Ответ #4 : 18 Августа 2002, 09:51:21 »
Ну так напиши, чтоб мы были повнимательнее! :)

Оффлайн C++

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 221
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Открытие файла на чтение и запись???
« Ответ #5 : 18 Августа 2002, 10:50:56 »
Цитировать
$a=unpack($strTemplate,$data);

а надо
Цитировать
@a=unpack($strTemplate,$data);

т.е. вместо списка скаляр стоял...

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Открытие файла на чтение и запись???
« Ответ #6 : 18 Августа 2002, 19:00:24 »
Вот и я - увидел, почухал затылок, и опустил в своем примере. Чтож буть внимательнее в следующий раз. Удачи!

Оффлайн C++

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 221
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Открытие файла на чтение и запись???
« Ответ #7 : 18 Августа 2002, 23:34:22 »
Народ, а вообще, может кто-нибудь готов рассказать о подводных камнях при открытии файла на чтение и запись? Думаю не мне одному было бы это интересно. Просто, хоть эта проблема и решена, зато появилась куча новых багов, о которых пока не хочу писать (буду сам пробовать исправлять).
Расскажите, будет очень полезно!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28