PDA

View Full Version : سوال: insert char* to file



arashmidos2020
سه شنبه 01 دی 1388, 21:58 عصر
سلام برای ذخیره سازی یک کاراکترپوینتر در یک فایل من این کارو می کنم:
تو یک structur مقادیری که می خواهم نگه می دارم(فرضا اطلاعات یک دانشجو!) و طول استرینگ رو هم نگه می دارم اما وقتی می خوام این استراکتچر رو از تو فایل بخونم مقدار استریگ رو نشون نمی ده؟
چرا؟
آیا راه دیگری هم هست که این structure رو تو فایل ذخیره کنم؟


struct info
{
int id;
int length_name;
char* name;
int length_tel;
char* tel;
};

ضمنا ی من با fopen hc از stdio.h کار می کنم.

arashmidos2020
سه شنبه 01 دی 1388, 22:47 عصر
چه راهی برای ذخیره کردن طول یک زشته نامعلوم تو فایل به نظرتون می رسه؟

mortezamsp
چهارشنبه 02 دی 1388, 13:12 عصر
باید اندازه رکورد رو هم ذخیره کنین :


struct record
{
int recl; //record length
char* name ;
int namel; //name length
char* tel;
int tell; //tell length
}

بعد از اینکه طول رشته ها رو مشخص کردی، اون رو با متغیر recl جمع کن.



راه دیگه اینه که یه فایل دیگه درنظر بگیرین برای ذخیره طول رکورد ها . این فایل index شامل رکوردهایی با اندازه ثابت است که یک فیلد کلید (مثلا برای شماره رکورد )دارد و یک فیلد برای طول رکورد. اینطوری وقتی میخواهید رکوردی با کلید خاص( مثلا رکورد شماره 3) را بخوانید، به فایل ایندکس مراجعه میکنید ( رکوردی در ایندکس که فیلد اولش 3 است) و مقدار طول را میخوانید، سپس از فایل اصلی میخوانید.

struct index
{
int recnum; //record number
int reclen; //record lenth
}

mehdi.mousavi
چهارشنبه 02 دی 1388, 13:23 عصر
سلام.
فقط خواستم بگم fopen منقضی شده و دیگه نباید از اون استفاده کرد. بهتره از fopen_s (http://msdn.microsoft.com/en-us/library/z5hh6ee9%28VS.80%29.aspx) استفاده کنید.

در مورد سوال شما هم، کاملا بستگی داره که چیکار بخواهید بکنید. پاسخی که بهتون دادن صحیحه، اما این سوال مطرحه که هنگام Update شدن این structure شما چی کار میخواهید کنید؟ آیا میخواهید کل فایل رو از ابتدا مجددا بنویسید؟ چون ممکنه رشته ای که الان 10 بایت بوده، هنگام Update، شده باشه 30 بایت. آیا میخواهید کل فایل رو مجددا بنویسید، یا نه، اون 10 بایت سر جاش بمونه، 20 بایت دیگه به انتهای فایل افزوده بشه و هنگام خوندن 30 بایت خونده بشه؟

موفق باشید.

tdkhakpur
چهارشنبه 02 دی 1388, 17:10 عصر
سلام.
فقط خواستم بگم fopen منقضی شده و دیگه نباید از اون استفاده کرد. بهتره از fopen_s (http://msdn.microsoft.com/en-us/library/z5hh6ee9%28VS.80%29.aspx) استفاده کنید.

چرا مگه چه ایرادی دارد؟