الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

التعامل مع الملفات (++VC)

مغلق
بدأه البريشي في 16 يوليو 2007 · 11 رد · 1,344 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم اله الرحمن الرحيم

كتبت هذا الكود ليقوم بتخزين أحرف حسب الـ ASCII للحرف من ( 0 - 255 ) في الملف t1.txt ثم يقوم بالقراءة من الملف الأول وينسخ ما فيه حرف حرف الى الملف الثاني t2.txt لكنه لا ينسخه طبق الأصل كما يفترض به أن يكون

حيث يقرأ الأحرف كلها بنفس القيمة -52 لذا فإن الناتج في الملف الثاني يكون تكرار حرف حـ فما الخطأ في الكود التالي :

كود انشاء الملف الأول والتخزين داخله

 
fstream test1File	("t1.txt",ios::out|ios::app|ios::binary );
for (int j=0;j<=255;j++)
{
test1File.put(j);
}
test1File.close();

كود نسخ الملف الأول الى الملف الثاني

test1File.open("t1.txt",ios::out|ios::app|ios::binary );
fstream test2File	("t2.txt",ios::out|ios::app|ios::binary   );
char ch1;
for (int i=0;i<=255;i++)
{
test1File.get(ch1);
printf("%c , %i , ",ch1,ch1);
test2File.put(ch1);
}
test1File.close();
test2File.close();

تم تعديل هذه المشاركة بواسطة البريشي في 16 يوليو 2007 في 11:35

********************* ******************** *********************

(( أشــهد أن لا اله الا الله ..... وأشهد أن محمد رسول الله ))

********************* ******************** *********************

لا تقـل من أيـن أبدأ

طـاعـة الله الـبدايـة

***

لا تقـل أين طـريـقي

شــرع الله الهـدايـة

***

لا تـقـل أيـن نعـيمي

جـنـة الله كـفـايـــــة

***

لا تقـل في الغـد أبدأ

ربمـــا تأتـي النهـايـــة

**************** **************** ****************

#2

لا أعلم ان كنت مستعجل كثير أو انه المنتدى متغيره أوضاعه فأنا لا أجد أي تجاوب مع المواضيع والأسئلة التي أطرحها ، لكن يبقى لي الأمل بالله ثم بأعضاء المنتدى أن يساعدوني في حل المأزق اللي أنا فيه

للرفع

والسلام عليكم ورحمة الله وبركاته

********************* ******************** *********************

(( أشــهد أن لا اله الا الله ..... وأشهد أن محمد رسول الله ))

********************* ******************** *********************

لا تقـل من أيـن أبدأ

طـاعـة الله الـبدايـة

***

لا تقـل أين طـريـقي

شــرع الله الهـدايـة

***

لا تـقـل أيـن نعـيمي

جـنـة الله كـفـايـــــة

***

لا تقـل في الغـد أبدأ

ربمـــا تأتـي النهـايـــة

**************** **************** ****************

#3
fstream sf1,sf2;
char ch;

sf1.open("t1.txt",ios::out|ios::app|ios::binary );
sf2.open("t2.txt",ios::out|ios::app|ios::binary );

for (int i=0;i<=255;i++)
{
sf1.read(chr,sizeof(char));
sf2.write(chr,sizeof(char));
}
sf1.close();
sf2.close();

تم تعديل هذه المشاركة بواسطة garo في 16 يوليو 2007 في 16:00

( _ /)

(='.'=)

(")-(")

#4

السلام عليكم,

ببساطة أنت تقوم بكتابة قيمة بحجم 32بت للملف (int) ولكنك عندما تقرأها تقرأها كقيمة 8 بت (char)

لحل المشكلة فقط غير int و الـ char إلى unsigned char, الـ char لوحده يعرف قيمة 8 بت ذات إشارة مما يعني إن أقصى عدد ممكن 128 وأقل عدد ممكن -127, ولكن عند تعريفه كـ unsigned ستكون أقصى قيمة له 255 وأقل قيمة 0.

// Writing to file
fstream test1File	("t1.txt",ios::out|ios::app|ios::binary );
for (unsigned char j=0;j<=255;j++)
{
 test1File.put(j);
}
test1File.close();

// Reading from file
test1File.open("t1.txt",ios::out|ios::app|ios::binary );
fstream test2File	("t2.txt",ios::out|ios::app|ios::binary   );
unsigned char ch1;
for (int i=0;i<=255;i++)
{
 test1File.get(ch1);
 printf("%c , %i , ",ch1,ch1);
 test2File.put(ch1);
}
test1File.close();
test2File.close();

:)

#5

بسم الله الرحمن الرحيم

صدقا كنت بدي أعيد البرمجه على VB

أشكركم أخواني على الرد

الأخ garo ماذا تعمل sizeof(char) وكيف ستقوم بحل المشكلة

الأخ SandHawk مشكور على التوضيح ، سأجرب وأرد خبر

وأشكركم مرة أخرى وان شاء الله الاقي رد على باقي الأسئلة

********************* ******************** *********************

(( أشــهد أن لا اله الا الله ..... وأشهد أن محمد رسول الله ))

********************* ******************** *********************

لا تقـل من أيـن أبدأ

طـاعـة الله الـبدايـة

***

لا تقـل أين طـريـقي

شــرع الله الهـدايـة

***

لا تـقـل أيـن نعـيمي

جـنـة الله كـفـايـــــة

***

لا تقـل في الغـد أبدأ

ربمـــا تأتـي النهـايـــة

**************** **************** ****************

#6

بسم الله الرحمن الرحيم

الأخ SandHawk

الكود اللي كتبته يظهر رسالة خطأ عند القراءة من الملف وهي :

G:\Tuesday\AES.cpp(80) : error C2664: 'class std::basic_istream<char,struct std::char_traits<char> > &__thiscall std::basic_istream<char,struct std::char_traits<char> >::get(char &)' : cannot convert parameter 1 from 'unsigned char' to 'char &'

الخطأ في السطر :

test1Filet.get(ch1t);

يبدو أنه يجب أن نعمل شيء قبل التعامل مع unsigned في القراءة

أرجو أن أجد الحل عندكم .

والسلام عليكم ورحمة الله وبركاته

********************* ******************** *********************

(( أشــهد أن لا اله الا الله ..... وأشهد أن محمد رسول الله ))

********************* ******************** *********************

لا تقـل من أيـن أبدأ

طـاعـة الله الـبدايـة

***

لا تقـل أين طـريـقي

شــرع الله الهـدايـة

***

لا تـقـل أيـن نعـيمي

جـنـة الله كـفـايـــــة

***

لا تقـل في الغـد أبدأ

ربمـــا تأتـي النهـايـــة

**************** **************** ****************

#7

عفواً هنالك خطأ لم أنتبه له.

دالة get لا تأخذ char بل إنها تعيد int

لذلك:

ch1 = test1Filet.get();

تم تعديل هذه المشاركة بواسطة SandHawk في 17 يوليو 2007 في 20:19

#8

يرجع دائما 255

علما أنني عملت برنامج على VB يقرأ من نفس الملف وقرأه بشكل صحيح

********************* ******************** *********************

(( أشــهد أن لا اله الا الله ..... وأشهد أن محمد رسول الله ))

********************* ******************** *********************

لا تقـل من أيـن أبدأ

طـاعـة الله الـبدايـة

***

لا تقـل أين طـريـقي

شــرع الله الهـدايـة

***

لا تـقـل أيـن نعـيمي

جـنـة الله كـفـايـــــة

***

لا تقـل في الغـد أبدأ

ربمـــا تأتـي النهـايـــة

**************** **************** ****************

#9

لم أعتقد إن هكذا برنامج بسيط قد يحتوي على عدد كبير من التعقيدات... ولكن هذه ++C :P

أنا أعتذر مرة ثانية عن أخطائي التي كان سببها التسرع.

هنالك أشياء كثيرة سببت المشاكل الموجودة, ولقد كتبت برنامج يتبع نفس الإسلوب تستطيع أن تلقي نظرة على الإختلافات. وإذا وجدت أي شئ غير واضح سأحاول أن أوضحه.

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

fstream test1File;

void writeFile()
{
 // Writing to file
 test1File.open("t1.txt",ios::out|ios::binary );
 test1File.clear();
 for( int j = 0; j < 256; j++ )
 {
  test1File.put( (char)j );
 }
 test1File.close();
}

void readFile()
{
 // Reading from file
 test1File.open("t1.txt",ios::in|ios::binary );
 fstream test2File("t2.txt",ios::out|ios::binary   );
 char ch1;
 for (int i=0;i<=255;i++)
 {
  test1File.get( ch1 );
  printf("%c, %d\n",ch1, ch1);
  test2File.put( ch1 );
 }
 test1File.close();
 test2File.close();
}

void main()
{
 writeFile();
 readFile();
}
#10

يبدو أنه عندما يخزن في الملف يصل فعليا الى الحرف الأخير في الملف وبعد أن أغلقه ثم أفتح نفس الملف في المرة الثانية فإنه يبقى عند آخر حرف في الملف لذا فإنه يبدأ من عنده وعندما لا يجد شيء يأتي بأي حرف ويقرءه لذا تنتج قراءة خاطئة للملف

وذلك لأني وضعت شرط يفحص انتهاء الملف تبين أنه يقرأ حرف واحد فقط ثم ينتهي الملف

جربت الأمر

test1Filet.seekg(1);

وكذلك

test1Filet.seekp(1);

ولكن لم أستفيد

هل يوجد حل آخر يرجعني لبداية الملف .

تم تعديل هذه المشاركة بواسطة البريشي في 17 يوليو 2007 في 21:08

********************* ******************** *********************

(( أشــهد أن لا اله الا الله ..... وأشهد أن محمد رسول الله ))

********************* ******************** *********************

لا تقـل من أيـن أبدأ

طـاعـة الله الـبدايـة

***

لا تقـل أين طـريـقي

شــرع الله الهـدايـة

***

لا تـقـل أيـن نعـيمي

جـنـة الله كـفـايـــــة

***

لا تقـل في الغـد أبدأ

ربمـــا تأتـي النهـايـــة

**************** **************** ****************

#11
SandHawk كتب:
ولكن هذه C++ :P

أما أنا :wacko:

SandHawk كتب:
أنا أعتذر مرة ثانية عن أخطائي التي كان سببها التسرع.

على أيش تعتذر أنت عملت اللي عليك

أنا اللي لازم أعتذر عن ثقل دمي

أنا الآن سأغادر النت

سأحاول أن أجري اللازم وأرد خبر ( ايجابي ) ان شاء الله

أعتذر مرة أخرى عن الازعاج

تم تعديل هذه المشاركة بواسطة البريشي في 17 يوليو 2007 في 21:20

********************* ******************** *********************

(( أشــهد أن لا اله الا الله ..... وأشهد أن محمد رسول الله ))

********************* ******************** *********************

لا تقـل من أيـن أبدأ

طـاعـة الله الـبدايـة

***

لا تقـل أين طـريـقي

شــرع الله الهـدايـة

***

لا تـقـل أيـن نعـيمي

جـنـة الله كـفـايـــــة

***

لا تقـل في الغـد أبدأ

ربمـــا تأتـي النهـايـــة

**************** **************** ****************

#12

بسم الله الرحمن الرحيم

مشكور أخي SandHawk على محاولتك مساعدتي

حلت المشكلة

وجدت كود على موقع cplusplus حاليا وضعه تمام وان شاء الله انه بكره بكمل البرنامج ويكون تمام وليس كسابقاتها .

********************* ******************** *********************

(( أشــهد أن لا اله الا الله ..... وأشهد أن محمد رسول الله ))

********************* ******************** *********************

لا تقـل من أيـن أبدأ

طـاعـة الله الـبدايـة

***

لا تقـل أين طـريـقي

شــرع الله الهـدايـة

***

لا تـقـل أيـن نعـيمي

جـنـة الله كـفـايـــــة

***

لا تقـل في الغـد أبدأ

ربمـــا تأتـي النهـايـــة

**************** **************** ****************

هذا الموضوع مغلق.

مواضيع مشابهة