نمایش نتایج 1 تا 8 از 8

نام تاپیک: ایجاد فایل با نام جدید در صورت وجود فایل؟!

  1. #1
    کاربر دائمی
    تاریخ عضویت
    خرداد 1389
    محل زندگی
    Tehran
    پست
    251

    ایجاد فایل با نام جدید در صورت وجود فایل؟!

    سلام

    داخل پوشه ای فایلی با نام "123a" وجود داره
    میخام بررسی بشه اگه فایلی با این نام وجود داشت بجای b ، a بزاره، مثلا بشه : "123b" و همینطور الی آخر تا "z"

  2. #2
    کاربر دائمی آواتار پرستو پارسایی
    تاریخ عضویت
    آبان 1392
    محل زندگی
    تهران
    پست
    458

    نقل قول: ایجاد فایل با نام جدید در صورت وجود فایل؟!

    می‌توانید از یک حلقه for برای ایجاد اسم فایل جدید با استفاده از تابع System.IO.File.Exists استفاده کنید. این تابع برای بررسی وجود یک فایل در مسیر مشخص شده استفاده می‌شود. برای تغییر یک حرف در نام فایل، می‌توانید از تابع String.Replace استفاده کنید. به عنوان مثال، کد زیر نمونه‌ای از چگونگی انجام این کار است:

    Dim fileName As String = "123a"
    Dim fileExtension As String = ".txt"
    Dim newFileName As String


    For i As Integer = Asc("a") To Asc("z")
    newFileName = fileName.Replace("a", Chr(i)) + fileExtension
    If Not System.IO.File.Exists(newFileName) Then
    Exit For
    End If
    Next


    MsgBox("New file name: " & newFileName)


    در این کد، ابتدا یک رشته با نام fileName و پسوند fileExtension ایجاد شده است. سپس با استفاده از یک حلقه for، حرف آخر نام فایل تغییر داده شده و نام فایل جدید ساخته می‌شود. در هر مرحله از حلقه، با استفاده از تابع System.IO.File.Exists بررسی می‌شود که فایل با نام جدید در مسیر مورد نظر وجود دارد یا خیر. در صورتی که فایل وجود نداشت، حلقه توقف می‌کند و نام فایل جدید در متغیر newFileName ذخیره می‌شود. در انتها، نام فایل جدید در msgbox گزارش میشود

  3. #3
    کاربر دائمی
    تاریخ عضویت
    خرداد 1389
    محل زندگی
    Tehran
    پست
    251

    نقل قول: ایجاد فایل با نام جدید در صورت وجود فایل؟!

    ممنون از شما

  4. #4
    کاربر دائمی آواتار ROSTAM2
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    فارس
    پست
    1,646

    نقل قول: ایجاد فایل با نام جدید در صورت وجود فایل؟!

    سلام.

    نظرتون رو در مورد این روش تغییر نام بگید:

    https://www.aparat.com/v/zxloy

  5. #5
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,057

    نقل قول: ایجاد فایل با نام جدید در صورت وجود فایل؟!

    نقل قول نوشته شده توسط ROSTAM2 مشاهده تاپیک
    سلام.

    نظرتون رو در مورد این روش تغییر نام بگید:

    https://www.aparat.com/v/zxloy
    سلام و روز خوش
    حالا چرا آپارات؟

    راستش مدت ویدئو 15 دقیقه بود و من فقط 1-2 از اول و همینقدر از آخرش رو فقط دیدم.
    در هر صورت کد تمیز و حرفه ای بود (مثل همه کارهای شما)،
    فقط کاش یک کپی هم از خود کد رو اینجا پیوست میکردین.

  6. #6
    کاربر دائمی آواتار ROSTAM2
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    فارس
    پست
    1,646

    نقل قول: ایجاد فایل با نام جدید در صورت وجود فایل؟!

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    سلام و روز خوش
    حالا چرا آپارات؟

    راستش مدت ویدئو 15 دقیقه بود و من فقط 1-2 از اول و همینقدر از آخرش رو فقط دیدم.
    در هر صورت کد تمیز و حرفه ای بود (مثل همه کارهای شما)،
    فقط کاش یک کپی هم از خود کد رو اینجا پیوست میکردین.
    با تشکر از نظر شما در مورد کد و اینکه من با RegEx زیاد آشنایی ندارم ممکنه کد من در متودهای Extension مشکل داشته باشه.
    این پروژه یک ماجول داشت که Extension Methods در اون قرار داشت و من موقع ظبط ویذئو از اون غافل شدم:


    Imports System.Runtime.CompilerServices
    Module Members


    <Extension> Function FirstWord(str As String) As String
    Dim Expr$ = str
    Dim Length As Integer = 0
    If str.Contains(Space(1)) Then
    Length = InStr(str, Space(1)) - 1
    Return str.Substring(0, Length)
    End If
    Return Expr
    End Function
    <Extension> Function FirstWord(str As String, ParamArray Excludes As Char()) As String
    Dim Expr$ = str
    Dim Index% = str.Length + 1
    For Each Exclude As Char In Excludes
    If str.Contains(Exclude) Then
    Index = InStr(str, Exclude).LessThan(Index)
    End If
    Next
    Return str.Substring(0, Index - 1)
    End Function
    <Extension> Function LessThan(Expr As Integer, Value As Integer)
    If Expr >= Value Then
    Return Value
    End If
    Return Expr
    End Function
    Structure NameInfo
    Public Title As String, Number As Integer
    Sub New(Title$, Optional Number% = 0)
    Me.Title = Title
    Me.Number = Number
    End Sub
    End Structure
    <Extension> Function Info(str As String) As NameInfo
    Dim RegEx As New Text.RegularExpressions.Regex("\w*\(\d*\)")
    With RegEx.Match(str)
    If .Success Then
    Return New NameInfo(Trim(str.Substring(0, str.Length - .Value.Length)), Val(.Value.Substring(1, .Value.Length - 1)))
    End If
    Return New NameInfo(str, 0)
    End With
    End Function
    End Module


    این هم دستورات متود Startup از کنسول اپلیکیشن:

    Sub Main()
    Dim Word As String = "", CommandLine As String = ""
    Dim FileNames$() = {"FileName", "FileName (2)", "FileName (3)", "FileName (4)"}
    Do Until Word.ToUpper = "EXIT"
    Console.Write("NewNameCreator> ")
    CommandLine = Console.ReadLine
    Word = CommandLine.FirstWord()
    Select Case Word.ToUpper
    Case "EXIT"
    Exit Do
    Case "NEW"
    Dim X% = 0
    Dim NewName As String = ""
    Dim FileName As String = FileNames(0)
    Console.WriteLine(" Exist FileName: {0}", FileName)
    NewName = FileName
    Do While NewName.ToLower = FileName.ToLower
    FirstLine: X += 1
    NewName = String.Format("{0} ({1})", StrConv(FileName.Info.Title, VbStrConv.ProperCase), X)
    For i = 1 To FileNames.Count - 1
    If NewName.ToLower = FileNames(i).ToLower Then GoTo FirstLine
    Next
    Loop
    Console.WriteLine(" NewName is: {0}", NewName)
    End Select
    Loop
    End Sub


    این هم سورس پروژه:
    NewNameCreator.zip

  7. #7
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,057

    نقل قول: ایجاد فایل با نام جدید در صورت وجود فایل؟!

    سلام دوباره
    اگر بخواهیم فایل جدید رو با شماره گذاری مشخص کنیم (شبیه روش نامگذاری در ساخت new folder) از کد زیر هم میشه استفاده کرد:
    Function Get_First_Available_Name(Path As String,
    FileName As String,
    Extention As String) As String
    Dim New_FileName As String = $"{Path}{FileName}.{Extention}"
    Dim FileNames As List(Of String) = IO.Directory.GetFiles(Path, $"{FileName}*.{Extention}").ToList
    If FileNames.Count > 0 Then
    Dim i As Integer = 0
    Do Until FileNames.IndexOf(New_FileName) = -1
    i += 1
    New_FileName = $"{Path}{FileName} ({i}).{Extention}"
    Loop
    End If
    Return New_FileName
    End Function


    با این تفاوت که در ساخت new folder شماره گذاری از 2 شروع میشه!

    همین منطق رو میشه برای نامگذاری بر اساس کارآکتر هم به کار برد.
    در واقع کد پست شماره 2 هم همینجور هست - فقط در کد زیر یک بار directory میگیریم و بعد از ساختن نام فایل اون رو در نتایج جستجو میکنیم،
    ولی در کد خانم پارسایی هر بار که نام فایل جدید ساخته میشه، وجود اون چک میشه (یعنی سراغ دیسک میریم نه حافظه).
    Function Get_First_Available_Name_AZ(Path As String,
    FileName As String,
    Extention As String) As String
    Dim New_FileName As String = $"{Path}{FileName}.{Extention}"
    Dim FileNames As List(Of String) = IO.Directory.GetFiles(Path, $"{FileName}*.{Extention}").ToList
    If FileNames.Count > 0 Then
    Dim i As Integer = AscW("a") - 1
    Do Until FileNames.IndexOf(New_FileName) = -1
    i += 1
    If i > AscW("z") Then
    Return "No Name Available"
    Else
    New_FileName = $"{Path}{FileName}{ChrW(i)}.{Extention}"
    End If
    Loop
    End If
    Return New_FileName
    End Function

  8. #8
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,057

    نقل قول: ایجاد فایل با نام جدید در صورت وجود فایل؟!

    حالا که پست مرتبط با تاپیک گذاشتم، دیگه فکر نکنم گفتگو درباره موارد جانبی اسپم شمرده بشه.

    با اجازه جناب ROSTAM2 ،
    چند مورد در ارتباط با اکستنشن هایی که استفاده کردن به چشمم خورد که مطرح میکنم (جدا از کاربردشون در این مسئله):

    1- تابع LessThan :
    گویا این تابع باید مینیمم بین 2 مقدار رو برگردونه - که میشه اینجوری هم نوشت:
    <Extension> Function LessThan(Expr As Integer, Value As Integer) As Integer
    Return Math.Min(Expr, Value)
    End Function

    با اینحساب شاید واقعا نیازی بهش نباشه.

    2- تابع FirstWord :
    که از اسمش مشخص هست باید اولین کلمه یک استرینگ رو برگردونه.
    این تابع رو میتونیم به این صورت بنویسیم که اول همه whitespace ها رو به یک space ساده تبدیل و بعد اون رو split کنیم:

    Public Const Space As Char = ChrW(32)
    <Extension> Function FirstWord(str As String) As String
    str = Regex.Replace(str, "\s+", Space).Trim
    Return str.Split(Space).First
    End Function


    یا حتی بهتر این که همه کلمه ها رو به صورت یک لیست برگردونیم و اونجا دستمون بازتر هست:
    Public Const Space As Char = ChrW(32)
    <Extension> Function GetWords(str As String) As List(Of String)
    str = Regex.Replace(str, "\s+", Space).Trim
    Return str.Split(Space).ToList
    End Function


    3- گویا تابع FirstWord یک overload هم داره و اینجور که از ظاهرش برمیاد:
    یک لیست از کارآکترها مشخص میکنین و از اولین جایی که هر کدوم از این ها در استرینگ ظاهر بشه از استرینگ حذف میشه و سمت چپ اون برمیگرده.
    یعنی در واقع با FirstWord ارتباطی نداره و فقط یک substring با شرط هست (شاید اشتباه میکنم):
    <Extension> Function FirstWord(str As String, Excludes As Char()) As String
    Dim index As Integer = str.IndexOfAny(Excludes)
    If index = -1 Then
    Return str
    Else
    Return str.Substring(0, index)
    End If
    End Function

تاپیک های مشابه

  1. پاسخ: 1
    آخرین پست: چهارشنبه 08 خرداد 1398, 21:08 عصر
  2. پاسخ: 2
    آخرین پست: چهارشنبه 03 شهریور 1395, 23:27 عصر
  3. پاسخ: 0
    آخرین پست: جمعه 18 اردیبهشت 1394, 12:36 عصر
  4. پاسخ: 1
    آخرین پست: پنج شنبه 04 دی 1393, 01:43 صبح
  5. پاسخ: 5
    آخرین پست: چهارشنبه 06 دی 1391, 19:17 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •