سلام
لطفا به من در انجام عمل زير كمك كنيد
كپي شدن برنامه اجرا شده در مسير دلخواه به محض اجرا
يعني تا فايلexe اجرا ميشه يه كپي از اون در جايي كه ما قبلا تو برنامه مشخص كرديم ايجاد بشه.
يه جورايي همون مسير يابي فايل در حال اجرا.(فايل Exe)
با تشكر
Printable View
سلام
لطفا به من در انجام عمل زير كمك كنيد
كپي شدن برنامه اجرا شده در مسير دلخواه به محض اجرا
يعني تا فايلexe اجرا ميشه يه كپي از اون در جايي كه ما قبلا تو برنامه مشخص كرديم ايجاد بشه.
يه جورايي همون مسير يابي فايل در حال اجرا.(فايل Exe)
با تشكر
کد:Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Dim Address As String
Private Sub Form_Load()
Address = String$(128, Chr$(0))
Address = Left$(Address, GetModuleFileName(hInst, Address, Len(Address)))
End Sub
سلام
عزیز جان من قبلا گفتم شما دستور کپی پیست را بنویس .
و کد اصلی را در فورم لود بزار تا برنامه اجرا شد دستورات کپی اجر شود.
سلام
عزیز جان من قبلا گفتم شما دستور کپی پیست را بنویس .
و کد اصلی را در فورم لود بزار تا برنامه اجرا شد دستورات کپی اجر شود.
ممنون
آقا پيمان درباره كد ها يه توضيح مختصر بده.(مخصوصا نحوه تعيين آدرس)
تكنيك برتر شما پيغام خصوصي داريد.
ممنون
ببين اين كد آدرس فايل همراه اسم خود فايل رو ميريزه تو متغير Address
یعنی مثلا اگه فایل به اسم p.exe تو درایو c باشه محتویات Address میشه "C:\p.exe"کد:Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Dim Address As String
Private Sub Form_Load()
Address = String$(128, Chr$(0))
Address = Left$(Address, GetModuleFileName(hInst, Address, Len(Address)))
End Sub
بقیشم بلدی دیگه با filecopy تو مسیر جدید با اسم جدید کپی میشه
یه کپی از فایل اجراییت به اسم t.exe میره تو درایو Dکد:filecopy Address , "D:\t.exe"
اینم کل دستورات
کد:Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Dim Address As String
Private Sub Form_Load()
Address = String$(128, Chr$(0))
Address = Left$(Address, GetModuleFileName(hInst, Address, Len(Address)))
filecopy Address , "D:\t.exe"
End Sub
با تشکر از آقا پیمان بخاطر راهنماییشون،
کدی که ایشون گذاشتند کاملا درسته. فقط می خوام یه نکته رو یادآوری کنم؛ وقتی فایل exe برنامه رو برای بار اول اجرا کنیم، یک کپی از همون برنامه در مسیری که در دستور FileCopy مشخص کردیم، کپی می شه. حالا چون این دو فایل عینا مثل همه، پس اگه فایلی رو که جدیدا ایجاد شده(بدون تغییر نامش) اجرا کنیم، باز هم برنامه سعی می کنه فایلی به همون نام رو درون مسیر خودش ایجاد کنه، که این منجر به خطا می شه. با کمی تغییر می شه این خطا رو هندل کرد_من برای مشخص شدن مطلب یه MessageBox گذاشتم، در قسمت گرفتن خطا هر دستوری که دوست دارین می تونین بذارین_:
کد:Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Dim Address As String
Private Sub Form_Load()
Address = String$(128, Chr$(0))
Address = Left$(Address, GetModuleFileName(hInst, Address, Len(Address)))
On Error GoTo Handler
FileCopy Address, "c:\t.exe"
Exit Sub
Handler:
MsgBox "The File Existed!"
Err.Clear
End Sub
از همه شما عزيزان متشكرم.
واقعا استفاده كردم.
فقط دستور MsgBox "The File Existed!" رو به خاطر پيغام هاي مكرر حذف كردم.
البته اگه اشكالي نداره؟
سلام
ببينيد دوستان من ميخوام در دستور File copy از يه متغير به جاي آدرس استفاده كنم ولي نميشه.(يعني ترتيب اثر نميده.
با اين فرض كه Full_path از نوع String باشه.نقل قول:
Full_Path="c:\ppc.exe
FileCopy Address, Full_Path
روشت كه مشكلي نداره من حتي تست هم كردم و كپي شد شايد فايلت با همون اسم تو همون مسيره
filecopy اجرا میشه یا به error بر میخوره و ردش میکنه؟
سلام عزيزان
ببخشيد مي خواستم بدونم که اگر بخواهيم فايلمون در همه ي درايو هاي موجود کپي بشه چکار بايد بکنيم . منظورم اينکه تو همه ي درايو هاي که داريم .
خوب filecopy رو چند بار واسه همه درایو ها بنویس دیگهنقل قول:
نوشته شده توسط blackroos
البته توابعی هستند که همه درایوهای موجود رو شناسایی میکنه (حتی cdrom , writer, fllopy,removable ) و به ترتیب اونارو میریزه تو یه آرایه و شما میتونی از اون آرایه تو یه حلقه for برای کپی فایل در همه درایوها استفاده کنی اینجوری کد نویسیت خلاصه تر و کلی تر میشه و برنامت تو هر سیستمی جواب میده
نقل قول:
نوشته شده توسط Payman_62
برنامه بدون خطا اجرا ميشه.ولي كار نميكنه.(يعني فايل در مسيري كه به Full_path تخصيص داديم كپي نميشه) :sad:
عزيزان خوب وقتي که از filecopy استفاده مي کنيم اگر درايو مشخص شده موجود نباشه برنامه با خطا مواجه مي شه . براي اينکه با خطا مواجه نشم بايد چي کار کنم اگر مي شه با يک کد توضيح بدين .
ببین به نظر من اون قسمت که بیتا گفت اضافه کنی که خطا رو رد کنه رو موقتا حذف کن تا بفهمی مشکلت از کجاستنقل قول:
نوشته شده توسط gold_dragon
اگه به جای متغیر full_path مثلا بذاری "C:\a.txt" کپی میشه؟ آخه فایل kernel32 تو ورژن های مختلف وبندوز یه تفاوت های کوچیک با هم دارن شاید مال تو این تابع رو نداشته باشه
برای رد کردن خطا بیتا گفت چی کار کنی ولی اگه قرار باشه دستور filecopy برای همه درایوها اجرا بشه ممکنه کار گره بخوره بهتره برای این که برنامت مطمن باشه و فقط تو درایوهای موجود کپی کنی و سر cd rom و فلاپی گیر نکنه از این دستورات استفاده کنی آدرس فایلو پیدا میکنه درایوهاتو شناسایی میکنه و فایلتو تو درایوهایی که امکان کپی وجود داشته باشه کپی میکنهنقل قول:
نوشته شده توسط blackroos
کد:Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Dim Address As String, strNamedrv(40) As String, strSaveDrives As String
Dim i As Byte, j As Byte
Private Sub Form_Load()
'Find Address of your file
Address = String$(128, Chr$(0))
Address = Left$(Address, GetModuleFileName(hInst, Address, Len(Address)))
'Find your drives
strSaveDrives = String(255, Chr$(0))
ret& = GetLogicalDriveStrings(255, strSaveDrives)
For j = 1 To 100
If Left$(strSaveDrives, InStr(1, strSaveDrives, Chr$(0))) = Chr$(0) Then Exit For
strNamedrv(j) = Left$(strSaveDrives, InStr(1, strSaveDrives, Chr$(0)) - 1)
strSaveDrives = Right$(strSaveDrives, Len(strSaveDrives) - InStr(1, strSaveDrives, Chr$(0)))
Next j
'Copy your file in all drives
On Error Resume Next
For i = 1 To j
FileCopy Address, strNamedrv(i) & "NewName.exe"
Next i
End Sub