طریقه ی ساخت یک setup توی vb چه جوریه ؟
منظورم از لحاظ کده ... من مشابهش رو درست کردم.
کد کپی کردن یه فایل چیه ؟
چه جوری میشه یک progress bar رو به یه عملیاتی از برنامه مثل کپی کردن یا لود شدن نسبت داد ؟
Printable View
طریقه ی ساخت یک setup توی vb چه جوریه ؟
منظورم از لحاظ کده ... من مشابهش رو درست کردم.
کد کپی کردن یه فایل چیه ؟
چه جوری میشه یک progress bar رو به یه عملیاتی از برنامه مثل کپی کردن یا لود شدن نسبت داد ؟
طریقه ی ساخت یک setup توی vb چه جوریه ؟
منظورم از لحاظ کده ... من مشابهش رو درست کردم.
کد کپی کردن یه فایل چیه ؟
چه جوری میشه یک progress bar رو به یه عملیاتی از برنامه مثل کپی کردن یا لود شدن نسبت داد ؟
دست گلت درد نکنه،
ببخشید زحمت میدم :31:
:11::11::11::11::11::11::11:
سلام
خود VS امکان ساخت پروژه msi را دارد ...نقل قول:
طریقه ی ساخت یک setup توی vb چه جوریه ؟
دستور عادی کپی فایل این است:نقل قول:
کد کپی کردن یه فایل چیه ؟
ولی کپی را یکسره و بدون هیچ دیالوگی انجام میدهد.کد:System.IO.File.Copy("C:\file.txt", "D:\ali.txt")
(البته با api میتوانید در زمان کپی دیالوگ استاندارد همان سیستم عامل را هم نمایش دهید.)
چیز پیچیده ای نیست و سوالتان هم برایم کمی عجیب است، چون دقیقاً نمیتوانم متوجه شوم چه مشکلی در سر راهتان وجود دارد.نقل قول:
چه جوری میشه یک progress bar رو به یه عملیاتی از برنامه مثل کپی کردن یا لود شدن نسبت داد ؟
شما باید یک معیاری در کدتان داشته باشید، یک عدد که مشخص کننده Max مقدار و مقدار پیشرفت جاری باشد.
مثلاً در کپی 5 فایل، میتوانید معیار را تعداد فایل در نظر بگیرید،
آنگاه عدد Max را 5 در نظر بگیرید و با اتمام کپی هر فایل، شمارنده را یک واحد افزایش دهید
یا میتوانید معیار را حجم بایتی فایل در نظر بگیرید،
آنگاه عدد Max جمع بایتی کل فایلها خواهد بود و با اتمام کپی هر فایل، شمارنده را به اندازه حجم همان فایل افزایش میدهید.
حتی میتوانید عمل کپی هر فایل را خودتان دستی انجام دهید تا در هر لحظه بدانید چقدر از فایل کپی شده
(مثلاً تابع زیر میتواند فایل sourceFileName را در destFileName کپی کنید و اینکار را در بلوک های 16Kb انجام میدهد.)
حجم کل دیتایی که باید کپی شود strmsource.Length است) و حجم اطلاعاتی کپی شده تا همان لحظه strmdestin.Position است.)کد:Public Shared Sub FileCopy(ByVal sourceFileName As String, ByVal destFileName As String)
Const BUFFERSIZE As Integer = 16 * 1024
Dim buffer(BUFFERSIZE - 1) As Byte
Using _
strmsource As New System.IO.FileStream(sourceFileName,system.IO.FileMode.Open,system.IO.FileAccess.Read) , _
strmdestin As New System.IO.FileStream(destFileName,system.IO.FileMode.OpenOrCreate,system.IO.FileAccess.Write) )
Dim iRead As Integer
Do
iRead = strmsource.Read(buffer, 0, BUFFERSIZE)
If (iRead <= 0) Then Return
strmdestin.Write(buffer, 0, iRead)
'Report ... ,Max = strmsource.Length ,Current = strmdestin.Position
Loop
End Using
End Sub
اینقدر راحت بود و من نمیدونستم ؟!!!!!!! :18:
منو باش گفتم الان یه عالمه باید کد بنویسم .
از راهنماییتون ممنونم ... اما چند تا سوال :
ایکه گفتی یعنی چه ؟نقل قول:
خود VS امکان ساخت پروژه msi را دارد ...
چه جوری ؟نقل قول:
(البته با api میتوانید در زمان کپی دیالوگ استاندارد همان سیستم عامل را هم نمایش دهید.)
راستی یه سوال دیگه ... یادم رفت بپرسم :
آیا امکان این وجود داره که چیزی که من میخوام کپی کنم رو توی خود برنامم embedded کنم ؟
اگه این کار رو کنم path رو چه جوری باید بهش بدم ؟
یه سوال دیگه ... چه جوری میشه به وسیله ی وی بی سیستم کاربر رو چک کرد ؟
مثلا میخوام بگم اگه ویندوز کاربر ویستا ... فلان کار رو کن ... یعنی تو ایکس پی این کار رو نکنه
سلام
forum.p30world.com/showthread.php?p=1282316#post1282316نقل قول:
ایکه گفتی یعنی چه ؟
forum.p30world.com/showthread.php?p=1321023#post1321023
اگر سرچ کنید یک تاپیک دیگر هم جناب hamidreza_buddy دارند.
==============
Project->Add Classنقل قول:
چه جوری ؟
فایل جدید که ساخته شد همه چیز را پاک کنید و کد زیر را وارد کنید:
(این کد با مسیرهای unicode ای و نام فایلهای و پوشه های فارسی هم مشکلی ندارد.-برعکس VB6!)کد:Imports System.Runtime.InteropServices
Public NotInheritable Class OSFile
Private Sub New()
End Sub
Private Declare Unicode Function SHFileOperationW Lib "shell32.dll" (<MarshalAs(UnmanagedType.Struct), [In](), Out()> ByRef lpFileOp As SHFILEOPSTRUCT) As Integer
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
Private Structure SHFILEOPSTRUCT
Public hWnd As IntPtr
Public wFunc As Integer
<MarshalAs(UnmanagedType.LPWStr)> Public pFrom As String
<MarshalAs(UnmanagedType.LPWStr)> Public pTo As String
Public fFlags As Integer
Public fAnyOperationsAborted As Integer
Public hNameMappings As Integer
<MarshalAs(UnmanagedType.LPWStr)> Public lpszProgressTitle As String
End Structure
Public Shared Sub Copy(ByVal source As String, ByVal destin As String, ByVal owner As System.Windows.Forms.IWin32Window)
Dim s As New SHFILEOPSTRUCT
s.wFunc = 2
s.pFrom = source & ChrW(0)
s.pTo = destin & ChrW(0)
If (owner IsNot Nothing) Then
s.hwnd = owner.Handle
End If
SHFileOperationW(s)
End Sub
End Class
حالا باید بتوانید با دستوری شبیه این از دیالوگ مخصوص کپی کردن فایلها در خودر سیستم عامل استفاده کنید:
پارامتر آخر را برای پنجره مالک دیالوگ گذاشته ام، اگر دارید تک خط فوق را از داخل یک form اجرا میکنید میتوانید به جای Nothing اشاره گر Me را ارسال کنید.کد:OSFile.Copy("C:\Reza.txt", "D:\Mahdi.txt", Nothing)
==============
forum.p30world.com/showthread.php?p=1192806#post1192806نقل قول:
آیا امکان این وجود داره که چیزی که من میخوام کپی کنم رو توی خود برنامم embedded کنم ؟
اگه این کار رو کنم path رو چه جوری باید بهش بدم ؟
یا
میتوانید فایل را در MyComputer کپی کنید و در VS و SolutionExplorer با راست کلیک Paste کنید.
برای برخی فایلها مثل mdb و mdf و... به محض paste دیالوگی ظاهر میشود که مهم نیست و باید Cancel شود.
سپس فایل را در SolutionExplorer انتخاب کنید. (select) و به پالت properties بروید:
Build Action->Embedded Resource
Copy to Output Directory->Do not copy
تمام شد!
میتوانید در همان solutionexplorer با راست کلیک یک newfolder به نام دلخواهی بسازید و همه این قبیل فایلهایی که باید در داخل exe یا dll شما قرار بگیرند را در آن پوشه ی خاص قرار دهید.
برای Extract هم میتوانید از یکی از دو کد زیر استفاده کنید:
برای استفاده هم باید کدی شبیه این را اجرا کنید:کد:Public Shared Sub FileExtract1(ByVal sourceEmbeddedName As String, ByVal destFileName As String)
Const BUFFERSIZE As Integer = 16 * 1024
Dim buffer(BUFFERSIZE - 1) As Byte
Using _
strmsource As System.IO.Stream = System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream(sourceEmbeddedName) , _
strmdestin As New System.IO.FileStream(destFileName,system.IO.FileMode.OpenOrCreate,system.IO.FileAccess.Write) )
Dim iRead As Integer
Do
iRead = strmsource.Read(buffer, 0, BUFFERSIZE)
If (iRead <= 0) Then Return
strmdestin.Write(buffer, 0, iRead)
'Report ... ,Max = strmsource.Length ,Current = strmdestin.Position
Loop
End Using
End Sub
Public Shared Sub FileExtract2(ByVal sourceEmbeddedName As String, ByVal destFileName As String)
Dim buffer() As Byte
Using strmsource As System.IO.Stream = System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream(sourceEmbeddedName)
buffer = New Byte(CInt(strmsource.Length) - 1) {}
strmsource.Read(buffer, 0, buffer.Length)
End Using
System.IO.File.WriteAllBytes(destFileName, buffer)
End Sub
فرق دو نمونه در این است که اولی این ذخیره را در بلوک های کوچک 16K انجام میدهد و در نتیجه برای فایلهای کوچک و بزرگ با اطمینان قابل استفاده است.کد:FileExtract("Projectname.Filename.Extension", "C:\Filename.Extension")
ولی دومی یک فایل را در یک مرحله خوانده و ذخیره میکند و فقط برای فایلهایی با حجم کم و معقول قابل استفاده است.
اگر فکر میکنید که کد اول یک کم شبیه کد دستی پست قبلیم شده، احتمالاً حق با شما است!!!!
Stream مفهوم ساده ای در حد یک نوارنقاله اطلاعات را دارد و کاربرد وسیعی بسیار در دات نت دارد...
دانلود و اپلود asp.net در طراحی صفحات وب و وسایتها بر اساس همین اصول است و همچین برخی قابلیت های شبکه و یا فشرده سازی اطلاعات و بافرینگ برخی دیتاها و خواندن و نوشتن فایلها و... و همانطور هم که در این دو پست دیدید چندان مشکل نیست.
==============
... If (System.Environment.OSVersion.Version.Major>=6) Then ... Elseنقل قول:
مثلا میخوام بگم اگه ویندوز کاربر ویستا ... فلان کار رو کن ... یعنی تو ایکس پی این کار رو نکنه
forum.p30world.com/showthread.php?p=2856795
فكر ميكنم اين بحث رو به قسمت مربوطه منتقل كنيد بهتر باشه
البته فکر نکنم زیاد هم ضروری باشه ... ولی منتقل کردنش که کار مدیراس ... اگه خیلی واجبه این تاپیک رو منتقل کنن ولی نکنه به جای منتقل کردن حذف کنن !!!نقل قول:
فكر ميكنم اين بحث رو به قسمت مربوطه منتقل كنيد بهتر باشه
خیلی خیلی ممنون. خوب حالا که فایل رو embedded کردم نحوه ی آدرس دهیش چه جوریه ؟نقل قول:
میتوانید فایل را در MyComputer کپی کنید و در VS و SolutionExplorer با راست کلیک Paste کنید.
برای برخی فایلها مثل mdb و mdf و... به محض paste دیالوگی ظاهر میشود که مهم نیست و باید Cancel شود.
سپس فایل را در SolutionExplorer انتخاب کنید. (select) و به پالت properties بروید:
Build Action->Embedded Resource
Copy to Output Directory->Do not copy
من میخوام فایلی که embedded شده رو کپی کنم روی یه درایو.
چه جوری باید بهش آدرس بدم ؟