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

بعض الأسألة والطلبات لبرمجة Cleaner

بدأه CPP-Programmer في 19 أكتوبر 2008 · 8 رد · 851 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لو سمحتم فيه فكرة في راسي برمجة برنامج Cleaner للملفات المؤقتة وفيه مشاكل وقفت معي لآني مبتدئ شوية :D لو سمحتم اريد هذه الأشياء :

1- امر من الدوس او اى طريقة اخري لمسح الملفات (امر من الدوس بيكون del folder_name لكن المشكلة بيظهر رسالة تحذيرية هل فيه حل عشان ما اخلي هذه الرسالة تظهر يعني كود يخليها بدون انذار) او اى طريقة اخري لمسح الملفات بالسي++

(ملاحظة هامة : مسح الملفات التي بداخل المجلدات ، يعني مثلا اقوله امسح كل الملفات اللى في داخل مجلد "temp"وهكذا ! ان شاء الله تكونو فهمتوني ، وتكون بالدوس او اى طريقة اخري )

2- هل فيه دالة ولا طريقة لمعرفة حجم الملفات ؟ يعني فيه دالة ولا شئ تظهر لى حجم الملف ؟ يعني اكتب C:\my_file.txt

3- لو تقدرون يا شباب أي برنامج Cleaner مبرمج بالسي++ تحطوني اياة ؟ طبعا السورس كود :) عشان استفاد منه اكتر ولو حتي بواجهة MFC عادي ،

وشكراً لكم :(

Just C++ Life :)

#2

وعليكم السلام ،،

لديك حلين :

1) يمكنك استخدام دوال النظام DeleteFile و GetFileSize (تقريبا الأسم هكذا ...) .

2) يمكنك أستخدام الدوال i/o الموجوده لديك في اللغه ، مثلا لمعرفه حجم الملف قم بفتح الملف open ، ثم قم بالوصول الى أخره عن طريق الداله seek ، ثم خذ رقم البايت في هذه المرحله ftell في لغه سي أو ifstream::tellg()

في سي++ ، وسوف تحصل على حجم الملف ..

أنظر هنا :

Quick and Dirty Series: C++ FileSize() function

والحل الاول هو الأضمن والأكثر كفائه .. لكنه بالطبع سوف يعمل على نظام واحد ..

بالتوفيق ،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#3

أستخدم اخي الدالة remove لمسح الملفات

remove( "C:\\fileName.exe" )

وهذا االكود تعرف من خلاله عدد الملفات الموجودة بالمجلد .

#include <string>
#include <iostream>

#include <windows.h>
#include <conio.h>

#include <fstream>
using namespace std; 


int CountFiles(const std::string &refcstrRootDirectory,
			   const std::string &refcstrExtension,
			   bool			  bSubdirectories = true)
{
  int			 iCount		  = 0;
  std::string	 strFilePath;		  
  std::string	 strPattern;		  
  std::string	 strExtension;		 
  HANDLE		  hFile;				
  WIN32_FIND_DATA FileInformation;	  


  strPattern = refcstrRootDirectory + "\\*.*";
  hFile = ::FindFirstFile(strPattern.c_str(), &FileInformation);
  if(hFile != INVALID_HANDLE_VALUE)
  {
	do
	{
	  if(FileInformation.cFileName[0] != '.')
	  {
		strFilePath.erase();
		strFilePath = refcstrRootDirectory +
					  "\\" +
					  FileInformation.cFileName;

		if(FileInformation.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
		  if(bSubdirectories)
		  {

			int iRC = CountFiles(strFilePath,
								 refcstrExtension,
								 bSubdirectories);
			if(iRC != -1)
			  iCount += iRC;
			else
			  return -1;
		  }
		}
		else
		{
		  strExtension = FileInformation.cFileName;
		  strExtension = strExtension.substr(strExtension.rfind(".") + 1);

		  if((refcstrExtension == "*") ||
			 (strExtension == refcstrExtension))
		  {
			++iCount;
		  }
		}
	  }
	} while(::FindNextFile(hFile, &FileInformation) == TRUE);

	::FindClose(hFile);
  }

  return iCount;
}


int main()
{
  int iNumberOfFiles = 0;

  iNumberOfFiles = CountFiles("c:/folderName", "*");




   cout<<" the CountFiles is : "<<iNumberOfFiles<<endl;






  _getch();

  return 0;
}

تم تعديل هذه المشاركة بواسطة time1 في 19 أكتوبر 2008 في 23:25

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#4

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

اقتباس
3- لو تقدرون يا شباب أي برنامج Cleaner مبرمج بالسي++ تحطوني اياة ؟ طبعا السورس كود :) عشان استفاد منه اكتر ولو حتي بواجهة MFC عادي ،

post-91400-1224504637_thumb.png
#5

شكراً اخواني علي الردود جميعاً :)

وجدي عصام :

# بخصوص دالة deletefile صراحة لم استطع تنفيذها وكان يكتب undeclared identifier جربت بينهم اندر سكور وبدون وهكذا ولم تنفع ولكن الحمدلله نجحت في المسح عن طريق الدالة remove والدالة unlinkوتم المسح بنجاح لكن توجد مشكلة بقولها ان شاء الله بالأخر

# بخصوص GetFileSize تمام انه فيه دالة تسوي هكذا والحمدلله بحثت عنها ولقيت انها طريقتها هكذا : GetFileSize("c:\\file", NULL); بعد البحث والحمدلله ،، لكن بعد ان عملت لها cout ووضعت اكثر من ملف كل مرة يظهر لى الناتج 4294967295 !!! وهذا هو الكود كامل

#include <iostream.h>
#include <windows.h>
void main(){
cout << GetFileSize("C:\\my_file.zip", NULL);
}

وضعت له ملف تكست 1 كيلوبايت ظهر هذا الرقم ،، وضعت له ملف 80 ميجا ظهر نفس الناتج! ، ما الحل يا وجدي ؟؟هل هي مشكلة من الدالة او ماذا ؟؟؟؟ وحتي ماوضعت مسار وخليت المسار فارغ وبرضه نفس الاجابة :(

بخصوص رقم 2 احس انها الاولي اسهل لانها فنكشن وخلاص ومش فاهم الثانية اوي لانى مبتدئ شوية اخوي ،، وشكراً لك

Time1 :

#بخصوص الدالة remove تسلم تسلم تسلم انه انا عرفتها منك وكمان فيه صديق قالى unlink تشتغل والان بعرف الاثنين لكن فيه مشكلة او استفسار هل اقدر احذف ما بداخل كل المجلد من ملفات ؟ لانه مستحيل تكون الاسماء ثابتة وانا اللى احدد اسماء الملفات (بيكون ملف للكاش وصعب تحديد الاسماء للملفات ومستحيل) ؟؟ جربت اضع بعدها all و*لم ينفع!

#بخصوص الكود اللى يظهر كم ملف بالمجلد راااائع وانا ان شاء الله راح استعمله في برنامجي ان شاء الله :D

بن العيد (ضروري تعااال) :

حبيبي مثل كل مرة معي بمشاكل الMFC كل لما افتح اى ملف MFC يطلعلي اخطاء ومنهم البرنامج اللى انت وضعت الصورة تبعته وهذا بيفيدني ان شاء الله كتير :) ، بقولك وش بسوي بالضبط يمكن اكون انا بغلط بشئ!

1- فتح MFCApplication1.cpp

2- فتح MFCApplication1.rc

3- عمل كومبايل

يظهر هذه الاخطاء

--------------------Configuration: MFCApplication1 - Win32 Debug--------------------
Compiling...
MFCApplication1.cpp
C:\Documents and Settings\zAx\My Documents\Downloads\Compressed\MFCApplication1\MFCApplication1\MFCApplication1.cpp(16) : error C2059: syntax error : '&&'
C:\Documents and Settings\zAx\My Documents\Downloads\Compressed\MFCApplication1\MFCApplication1\MFCApplication1.cpp(16) : error C2143: syntax error : missing ';' before '}'
C:\Documents and Settings\zAx\My Documents\Downloads\Compressed\MFCApplication1\MFCApplication1\MFCApplication1.cpp(16) : error C2143: syntax error : missing ';' before '}'
C:\Documents and Settings\zAx\My Documents\Downloads\Compressed\MFCApplication1\MFCApplication1\MFCApplication1.cpp(17) : error C2143: syntax error : missing ';' before '{'
C:\Documents and Settings\zAx\My Documents\Downloads\Compressed\MFCApplication1\MFCApplication1\MFCApplication1.cpp(17) : error C2447: missing function header (old-style formal list?)
C:\Documents and Settings\zAx\My Documents\Downloads\Compressed\MFCApplication1\MFCApplication1\MFCApplication1.cpp(17) : error C2143: syntax error : missing ';' before '}'
Error executing cl.exe.

MFCApplication1.exe - 6 error(s), 0 warning(s)

كل لما افتح اى برنامج mfc واعمل كوومبايل يطلع لى اخطاء كثيرة مختلفة عن بعضها .......

وشكراً لكم منتظر ردكم واهم شئ كيف امسح كل الملفات اللى بكل المجلد عن طريق remove او unlink او اي شئ وباقي الأسألة يا شباب :(

Just C++ Life :)

#6

آخ زآكس اي نسخه لديك من مترجم ميكو ..

طبعآ يفضل الاصدآر الاخير , السآدس فيه مشآكل ..

سؤال خآرج الموضوع : هل انت مشترك بمنتديآت الهكر وجدت اسمك بمنتدى العآصفه ومنتديآت اخرى ؟!

#7

أستخدم الداله GetFileSizeEx بدلا من الأولى لأن الأولى فيها بعض المشاكل كما قرأت ،، وفي حال فتحت موضوع عن win32 api هنا في المنتدى ، ستجد من الأخ Xacker :

اقتباس
هذه الدالة شبيهة بـ GetFileSize الا ان هذه واقصد (بدون Ex) قد تخطئ عندما يكون حجم الملف 0xffffffff اي 4294967295 بايت اي 4194303.99 كيلو بايت اي 4095.99 ميغا بايت اي 3.99 غيغابايت اي بحدود 4 غيغا بايت وهو أمر ليس بمستبعد لذلك يفضل استخدام الدالة GetFileSizeEx لان المؤشر يسمح بأن يكون قيمة أكبر من DWORD, تمثل بعدد صحيح طويل. (PLARGE_INTEGER)

أطلع على موضوع GM حول دوال الAPI سوف يفيدك :

شرح : Win32 Api, شرح لبعض دوال Win32 API

ويفضل أن تتطلع على هذا ايضا ، حيث يتحدث عن الfile وDir بالسي و win32 api :

http://www.tenouk.com/ModuleC1.html

بالنسبه للطريقه الثانيه التي ذكرتها في ردي الأول ، فلا يفضل أن تستخدمها ، وأستخدم دوال API هذه أفضل ، لأن تلك الدوال تختلف مخرجاتها على حسب نوعيه الملف (عادي، باينري) ، لذلك ابتعد عن المشاكل واستخدم win32 api .

بالتوفيق ،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#8
اقتباس
Time1 :

#بخصوص الدالة remove تسلم تسلم تسلم انه انا عرفتها منك وكمان فيه صديق قالى unlink تشتغل والان بعرف الاثنين لكن فيه مشكلة او استفسار هل اقدر احذف ما بداخل كل المجلد من ملفات ؟ لانه مستحيل تكون الاسماء ثابتة وانا اللى احدد اسماء الملفات (بيكون ملف للكاش وصعب تحديد الاسماء للملفات ومستحيل) ؟؟ جربت اضع بعدها all و*لم ينفع!

#بخصوص الكود اللى يظهر كم ملف بالمجلد راااائع وانا ان شاء الله راح استعمله في برنامجي ان شاء الله

لحذف جميع الملفات في مجلد استخدم هذه الدالة

void DeleteAllFiles(char* folderPath)
{
 char fileFound[256];
 WIN32_FIND_DATA info;
 HANDLE hp; 
 sprintf(fileFound, "%s\\*.*", folderPath);
 hp = FindFirstFile(fileFound, &info);
 do
	{
	   sprintf(fileFound,"%s\\%s", folderPath, info.cFileName);
	   DeleteFile(fileFound);

	}while(FindNextFile(hp, &info)); 
 FindClose(hp);
}
llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#9

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

اقتباس
بن العيد (ضروري تعااال) :

post-91400-1224585921_thumb.gif

النجدااا :)

أغلب الأخطاء التي توجهها عند الترجمة تعود لإختلاف المترجم بين الفيزوال ستوديو 6 و فيزوال ستوديو .نت

error C2059

error C2143

error C2247

:)

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