PDA

View Full Version : سوال: افزودن عدد 1 به آخر اسم فایل در صورت موجود بودن



NasimBamdad
چهارشنبه 29 شهریور 1391, 18:50 عصر
سلام و خسته نباشید .

من یه همچین کدی دارم که کارش اینکه گزارش ساخته شده با Stimul Report رو در یک آدرسی ذخیره می کنه


stiReport1.SaveDocument("Saved_Reports\\" + textBox1.Text + ".mdc");


حالا یک کدی لازم دارم که اگه فایلی با اون اسم موجود بود ، اصلش رو نگه داره و یک عدد 1 به آخر اسمش اضافه کنه .

یک چیزی مثل همین Copy & Replace ویندوز که اگه موجود باشه ، یک اسم و یا نمادی بهش اضافه می کنه ، اگه باز اون اسم موجود باشه خودش تصمیم میگیره و بازم یکی بهش اضافه می کنه .



یک این طور کدی هم دارم


bool fileExist = File.Exists("C:\\a.txt");
if (fileExist)
{
do sth
}


چه طوری اسم فایل موجود رو بگیرم و اگه 1 آخرش بود ، اسم فایل جدید آخرش 2 باشه .

اگه فایلی که آخرش 2 هست موجود بود ، یک فایل جدید که آخرش 3 باشه ساخته بشه .
و اگه 3 آخرش بود ، فایل جدید آخرش 4 بشه . و همین طور .....

ممنون میشم کمک کنید

Mahmoud.Afrad
چهارشنبه 29 شهریور 1391, 23:33 عصر
یک تابع بازگشتی باید بنویسی که وظیفه اش ایجاد نام منحصر به فرد برای فایل هست:
private string UniqueFileName(string path, char separateCharacter)
{
List<string> allPartOfSplitFileName = System.IO.Path.GetFileNameWithoutExtension(path).S plit(separateCharacter).ToList();
string lastPartOfFileName = allPartOfSplitFileName.LastOrDefault();
if (!string.IsNullOrEmpty(lastPartOfFileName))
{
int number = -1;
bool LastPartOfFileNameIsNumber;
try
{
number = int.Parse(lastPartOfFileName);
LastPartOfFileNameIsNumber = true;
}
catch
{
LastPartOfFileNameIsNumber = false;
}

path = System.IO.Path.GetDirectoryName(path) + "\\";
if (LastPartOfFileNameIsNumber)
{
number++;
allPartOfSplitFileName.Take(allPartOfSplitFileName .Count - 1).ToList().ForEach(part => path += part + "_");
}
else
{
number = 1;
allPartOfSplitFileName.ForEach(part => path += part + "_");
}
path += number + ".txt";
}
else
{
path = System.IO.Path.GetDirectoryName(path) + "\\"
+ System.IO.Path.GetFileNameWithoutExtension(path)
+ "1" + ".txt";
}
if (System.IO.File.Exists(path))
{
return UniqueFileName(path, separateCharacter);
}
return path;
}

برای ذخیره باید چک کنید اگر نام تکراری بود تابع را فراخوانی کنید(دکمه ذخیره):
private void button13_Click_1(object sender, EventArgs e)
{
string fileName = textBox1.Text;
string path = "Saved_Reports\\" + fileName + ".txt";

if (File.Exists(path))
{
path = UniqueFileName(path, '_');
}
stiReport1.SaveDocument(path);
}
'_' کاراکتری هست که نام و عدد را از هم جدا میکند.

NasimBamdad
دوشنبه 03 مهر 1391, 13:25 عصر
از کد شما استفاده کردم و خیلی عالی بود . مرسی

اما فقط یک مشکل هست . اگر اسم فایل ما عدد باشه ، مثلا یوزر کاربر ما یک عدد مثل کد ملی باشه ، کد شما یک رقم به آخرین رقم اسم فایل اضافه می کنه و SAVE می کنه

مثلا اسم فایل ما 123.txt هست . کد شما میاد فایل جدید رو به جای اینکه 123_1.txt کنه ،، این طوری میشه

124.txt

مرسی !