PDA

View Full Version : مبتدی: بازکردن فایل در سی پلاس پلاس



raspina87
دوشنبه 22 فروردین 1390, 22:11 عصر
سلام
من یک برنامه کامپایلری نوشتم که سورسشو اینجا میزارم و میخوام یک فایلی تعریف کنم و مدام بهم ارورر میگیره ..
میشه لطفا کمکم کنید و چطور مثل یک فایل بنویسم و آیا اصلا نیازی هست و اگر اشکال برنامه ام برا بگید ممنون میشم ؟؟؟
من هنوز با فایلها کار نکیردم و نمیدونم درست انجام دادم ...
میخوام تابع مقدارم به صورت فایل در تابع کامپایلم فرخوانی بشود و کامپایل در برنامه اصلی فرخوانی شود...


#include "stdafx.h"
#include "conio.h"
#include "iostream"
#include "fstream"

using namespace std;
int A;
void meghdar (int A)
{
int B,c;
A=2;
B=3;
c=A+B;
B=2;
A=B*c;
{
cout << "A="<< A<< endl;
}


}



void compile (string input)
{
cout << "#include <iostream.h> "<<endl;
cout<< "int main ()"<<endl<<"{" << endl;
cout<<" int A,B,c" << endl;
// meghdar (A);
while (input != end)
{
string line =input.readline();
cout<< meghdar << endl;
}
cout << "return o;"<< endl;
cout << "}";
}

int _tmain(int argc, _TCHAR* argv[])
{ int a;
string input;
compile (input);

// fstream file("meghdar",ios::in );

cin >>a;
return 0;


}

raspina87
دوشنبه 22 فروردین 1390, 22:14 عصر
راستی یک مشکل دیگه که من با 2010 کار میکنم و تابع getch نمیشناسه و فعلا از sin استفاده کردم صفحه بماند .. لطفا بگید این مشکل رو چه طور حل کنم؟؟؟

root88
سه شنبه 23 فروردین 1390, 12:32 عصر
من با 2010 کار نکردم اما برای باز کردن می تونید به فرم زیر عمل کنید


#include <iostream>
#include <fstream>
using namespace std;

int main () {
ofstream myfile;
myfile.open ("example.txt");
myfile << "Writing this to a file.\n";
myfile.close();
return 0;
}


این برنامه تابعی رو برای نوشتن در اون باز میکنه و یه خط توی فایل نوشته میشه.می تونید در تابع open نحوه باز کردن فایل رو مشخص کنید اینکه می خواهید از فایل بخونید یا بنویسد و....

raspina87
پنج شنبه 25 فروردین 1390, 00:36 صبح
سلام،
ممنونم ، اما یک سوال دیگه
چطور میتونم مشخص کنم که قصد خوندن از فایل دارم؟؟؟
اطلاعاتم را در فایل نوشتم و حالا میخوام این اطلاعات را بخوانم ...

tdkhakpur
پنج شنبه 25 فروردین 1390, 12:38 عصر
اطلاعاتم را در فایل نوشتم و حالا میخوام این اطلاعات را بخوانم

از ifstream استفاده کنید تا فایل رو به عنوان ورودی باز کنه.

aleshi
یک شنبه 11 اردیبهشت 1390, 22:46 عصر
سلام
منو راهنمایی کنین.خواهشن فوری
من فایلو با ios::out در محیط VS2005 باز کردم و میتونم تو فایل هم بخونم و هم بنویسم.ولی چون این مدل باز کردن به صورت پیش فرض به صورت ios::trunc است و وقتی فایل این مدلی باز میشه کل محتویاتی که فایل قبلا داشته رو پاک میکنه. میخواستم منو راهنمایی کنین که فایلو چطوری باز کنم که بعد اینکه برنامه رو دوباره بخوام اجرا و فایلو باز کنم محتویات قبلی از بین نرم.
اگه یه مثال کوچولو برا این کار بنویسین خیلی ممنون میشم

shahmohammadi
یک شنبه 11 اردیبهشت 1390, 23:14 عصر
من تا حالا فايل ها رو اينطوري باز نكردم. شما مي شه بگيد با استفاده از ios::out چطور اين كارو مي كنيد.

aleshi
دوشنبه 12 اردیبهشت 1390, 11:33 صبح
سلام
ofstream temp

temp.open("c://b.txt",ios::out);
numRecordRW.close();
فایل b.txt را که در فایل سی هست رو برای نوشتن باز میکنه

aleshi
دوشنبه 12 اردیبهشت 1390, 11:36 صبح
ofstream temp

temp.open("c://b.txt",ios::out);
temp.close();
فایل b.txt که تو درایو سی هست رو برای نوشتن باز میکنه و با close هم فایل و میبنده

shahmohammadi
دوشنبه 12 اردیبهشت 1390, 11:58 صبح
ممنون دوست عزيز.
دوست عزيز كلاس ios يك خصوصيتي داره به اسم open_mode كه به صورت زير تعريف شده:
enum open_mode {
app, // Append data--always write at end of file.
ate, // Seek to end of file upon original open.
in, // Open for input (default for ifstreams).
out, // Open for output (default for ofstreams).
binary, // Open file in binary mode.
trunc, // Discard contents if file exists (default if out
// is specified and neither ate nor app is specified).
nocreate, // If file does not exist, open fails.

noreplace, // If file exists, open for output fails unless ate or app is set.
};
شايد تو كامپايلري كه شما توش كار مي كنيد كمي فرق داشته باشه اما حتما يكي از اعضاي اين داده شمارشي trunc هست كه مي تونيد تغييرش بديد. دقت داشته باشيد كه temp اين داده شمارشي رو به ارث مي بره. پس كدش مي شه:
temp.open_mode=...
و ... اون حالتيه كه شما مي خواهيد به كار ببريد.
اميد وارم مفيد بوده باشه.

shahmohammadi
دوشنبه 12 اردیبهشت 1390, 12:32 عصر
راستي!
شما گفتيد: تو فايل هم مي خونه هم مي نويسه ولي اين كه فقط يك مدشو (نوشتن) مي آره.
مي تونم بپرسم منظورتون چي بود؟

aleshi
دوشنبه 12 اردیبهشت 1390, 23:57 عصر
سلام
آقا دستتون درد نکنه که راهنمایی میکنین. ولی بازم مشکلم حل نمیشه.
مشکلم به طور واضح:
"برای بار اول که برنامه رو اجرا میکنم فایلو باز میکنه، داده توش ذخیره میشه، از داده های ذخیره شده تو برنامه استفاده میشه.ولی برای بار که برنامه اجرا میشه وقتی فایل باز میشه، داده های قبلی از بین میره."
مشکلش: وقتی فایل با out باز میشه، به صورت پیش فرض از trunc برای باز کردن استفاده میکنه. به این خاطره که همه محتویات قبلی فایل از بین میره.
راه حلش:چطوری میتونم این پیش فرضو از بین ببرم.


این برنامه هم اون مشکلو داره. یه بار با seek(5) اجرا کنین یه بار هم با seek(20) داده های قبلی رو پاک میکنه.
#include <iostream>
#include <fstream>
using namespace std;

int main () {
ofstream myfile;
myfile.open ("c://a.txt", ios::out);
myfile.seekp(5);
myfile << "Writing this to a file.\n";
myfile.close();
return 0;
}

ممنون میشم اگه فوری راهنمایی کنین.

aleshi
سه شنبه 13 اردیبهشت 1390, 00:01 صبح
سلام
آقا دستتون درد نکنه که راهنمایی میکنین. ولی بازم مشکلم حل نمیشه.
مشکلم به طور واضح:
"برای بار اول که برنامه رو اجرا میکنم فایلو باز میکنه، داده توش ذخیره میشه، از داده های ذخیره شده تو برنامه استفاده میشه.ولی برای بار بعد که برنامه اجرا میشه وقتی فایل برای نوشتن باز میشه، داده های قبلی از بین میره."
مشکلش: وقتی فایل با out باز میشه، به صورت پیش فرض از trunc برای باز کردن استفاده میکنه. به این خاطره که همه محتویات قبلی فایل از بین میره.
راه حلش:چطوری میتونم این پیش فرضو از بین ببرم.


این برنامه هم اون مشکلو داره. یه بار با seek(5) اجرا کنین یه بار هم با seek(20) داده های قبلی رو پاک میکنه.

shahmohammadi
چهارشنبه 14 اردیبهشت 1390, 11:19 صبح
بله برنامه اول درست كار نمي كنه بايد اين برنامه رو بنويسيد:
f#include <iostream.h>
#include <fstream.h>
#include <conio.h>

void main()
{
ofstream a;
a.open("a.txt",ios::app);
a<<"hello";
}

موفق باشيد.