PDA

View Full Version : سوال: دو تا سوال 1- كاراكتر انتهاي فايل 2- cin.getline بعد از cin



imi
چهارشنبه 22 خرداد 1387, 11:26 صبح
من دو تا سوال ساده (براي كسايي كه c++ كار كرده اند) دارم.
1- چه كاراكتري رو داخل يه فايل باينري بنويسيم كه انتهاي فايل رو مشخص كنه. يعني تمام اطلاعات بعد از اون ديگه حذف بشه و حجم فايل به مقدار اطلاعاتي باشه كه تا قبل از اون كاراكتر است.
2- چه كار كنيم كه cin.getline كه بعد از cin است اجرا بشه؟
ممنون

A_Salimi
چهارشنبه 22 خرداد 1387, 12:06 عصر
در مورد سوال دوم این لینک (http://barnamenevis.org/forum/showthread.php?t=89036) رو ببین

Nima_NF
چهارشنبه 22 خرداد 1387, 15:46 عصر
م
1- چه كاراكتري رو داخل يه فايل باينري بنويسيم كه انتهاي فايل رو مشخص كنه. يعني تمام اطلاعات بعد از اون ديگه حذف بشه و حجم فايل به مقدار اطلاعاتي باشه كه تا قبل از اون كاراكتر است.

معمولا وقتی کسی می خواهد فایلی را به صورت باینری ذخیره کند، یک هدر (در قالب یک struct) شامل اطلاعات فایل ذخیره می کند که مثلا می تواند شامل طول فایل باشد:



struct Fileheader
{
int size_f;
char *data;
// and more
};

بعد در هنگام فراخوانی و استفاده از فایل با عملگر sizeof طول دیتا خود را بدست می آورید و یا پر می کنید(به اندازه دیتا).



Fileheader headerF;

headerF.size_f = sizeof(char) * 100;

imi
شنبه 25 خرداد 1387, 16:44 عصر
در مورد سوال 2 منظور من اينه كه مثلا در كد زير در قسمتي كه بين ستاره مشخص شده چه كار كنيم تا فايل تا اونجا بشتر نباشه؟ مثلا مثل notepad چه كار كنيم كه يه سري كاراكتر از فايل حذف بشه و حجم فايل هم كم بشه؟
#include <iostream>
#include <fstream>
using namespace std;
void main()
{
fstream f;
f.open("d:\\a.txt",ios::in|ios::out|ios::binary);
if(f.good())
cout << "good";
f << "123456";
f.seekp(3);
//*********
f.put(?);
/*ya har kare dige*/
//*********
}

amir_civil
شنبه 25 خرداد 1387, 19:40 عصر
با سلام
هرجایی در رشته که اون رو برابر NULL قرار بدی از اونجا به بعد حذف میشه

imi
یک شنبه 26 خرداد 1387, 12:42 عصر
ميشه كدش رو بنويسه؟

amir_civil
یک شنبه 26 خرداد 1387, 13:37 عصر
// amir.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
int main()
{
char str[256]="AmirCivil";
str[3]=NULL;
std::cout<<str<<std::endl;
getch();
return 0;
}

imi
دوشنبه 27 خرداد 1387, 12:45 عصر
از دو حال خارج نيست يا شما منظور من رو نفهميديد يا من ربط پاسخ شما رو به سوال خودم نفهميدم!!!
سوال من روي فايل بود نه يه cout معمولي.
اصلا وقتي روي يه فايل "12345" بنويسم. بعد با notepad فايل رو باز مي كنيم و "45" رو پاگ مي كنيم. چه كاري انجام ميشه كه هم حجم فايل كم ميشه و كاراكتر هاي مورد نظر هم پاك شده اند؟
فكر نكنم كار سختي باشه؟ يه c كار نيست جواب سوال ساده من رو بده؟؟
با تشكر از همه جواب دهندگان قبلي و بعدي!

amir_civil
دوشنبه 27 خرداد 1387, 16:14 عصر
یه راهش اینه که با getline یه خط از فایل رو بخونی بعدش همون کاری که گفتم رو روش انجام بدی بعد دوباره اون متن ادیت شده رو تو فایل بنویس
ok?

emad_67
دوشنبه 27 خرداد 1387, 20:31 عصر
برای این کاری که شما میخوای بکنی، فکر نمیکنم راه مستقیمی وجود داشته باشه. یا باید راه جناب amir_civil رو بری یا اینکه محتویات فایل رو تا اونجایی که میخوای باقی بمونه، بخونی و توی یه آرایه نگه داری و بعد فایل فعلی رو حذف کنی و محتویات آرایه رو بریزی توی یه فایل جدید.

imi
سه شنبه 28 خرداد 1387, 13:47 عصر
نه ok !!!!!!!!!!
چه فرقي ميكنه؟ كاراكتر را كه روي فايل ميمونن.
شايد من درست نفهميدم چي ميگي. اگه كدش رو بزاري ممنون ميشم. فقط اگه كد رو گذاشتي خودت قبلش امتحانش كن.
در ضمن خودم با دو تا فايل مي دونستم مي خوام ببنيم ميشه بدون فايل كمكي اين كار رو كرد يا نه؟