PDA

View Full Version : ذخیره کردن فایل روی سیستم کلاینت بر روی سیستم سرور



samanta3000
یک شنبه 22 بهمن 1391, 16:54 عصر
سلام
من میخواستم برنامه ای بنویسم که آدرس عکسی رو که کلاینت روی سیستم خودش انتخاب میکنه در پوشه ای در سیستم سرور ذخیره بشه و آدرس آن در بانک سرور ذخیره بشه
با چه دستوری میتونم اینکارو بکنم؟
یعنی فایل داخل کلاینت رو در سرور کپی کنم
خیلی مهمه
خواهش می کنم کمک کنید

samanta3000
یک شنبه 22 بهمن 1391, 17:27 عصر
دستور کپی فایلو میدونم
نحوه آدرس دهیشو مشکل دارم
آدرس مقصد دستور کپی فایل را باید چطوری بدم؟

JaVa
یک شنبه 22 بهمن 1391, 18:30 عصر
شما باید اسم سرور رو بدونید بعد فایل مورد نظر هم باید Share شده باشه.


و نحوه آدرس دهی هم این حالته :

مثلا اسم سرور هست Server1
اسم پوشه هم هست Folder (این پوشه باید Share بشه)

//Server1/Folder/1.Pdf

در ضمن بجای نام سرور هم می تونید از ای پی سرور استفاده کنید.

موفق باشید

samanta3000
یک شنبه 22 بهمن 1391, 18:50 عصر
باتشکر از راهنمایی تون
چجوری میشه پوشه ای که قراره عکسها توش ذخیره بشه رو در هنگام نصب share کرد

تآکید میکنم باید به صورت اتومات اینکار صورت بگیره، یعنی در هنگام نصب پوشه share بشه، یعنی تنظیماتی برای اینکار توی setupسازی هست یا میشه با کدنویسی کاری کرد؟

JaVa
یک شنبه 22 بهمن 1391, 18:57 عصر
دوباره سلام.

این رفرنس رو به پروژهتون اضافه کنید.
System.Management

این فضا ها رو فراخوانی کنید :

import the System.Management
import System.Management.Instrumentation


این هم از کد share کردن یک پوشه


Try

Dim managementClass As New ManagementClass("Win32_Share")
Dim inParams As ManagementBaseObject = managementClass.GetMethodParameters("Create")

inParams("Description") = "My Description"
inParams("Name") = "Share Name"
inParams("Path") = "C:\My Folder"
inParams("Type") = &H0
Dim outParams As ManagementBaseObject = managementClass.InvokeMethod("Create", inParams, Nothing)
If Convert.ToUInt32(outParams.Properties("ReturnValue").Value) <> 0 Then
MessageBox.Show("Unable to share directory.")
else
MessageBox.Show("Shared folder successfully!")
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try


موفق باشید.

JaVa
یک شنبه 22 بهمن 1391, 19:13 عصر
تآکید میکنم باید به صورت اتومات اینکار صورت بگیره، یعنی در هنگام نصب پوشه share بشه، یعنی تنظیماتی برای اینکار توی setupسازی هست یا میشه با کدنویسی کاری کرد؟

شما می تونید اینکا رو کنید با اجرای بار اول برنامه بیاد مثلا چک بکنه پوشه وجود داره یا نه در صورت نبود پوشه پوشه رو ایجاد بکنه و اونرو share بکنه
مثلا برای بودن یا نبودن پوشه این کدها رو می نویسی که در صورت نبودن یه پوشه ایجاد می کنه
If My.Computer.FileSystem.DirectoryExists("D:\Folder") = False Then
My.Computer.FileSystem.CreateDirectory("d:\Folder")
End If
End Sub

samanta3000
یک شنبه 22 بهمن 1391, 21:44 عصر
باتشکر از پیگیری هاتون

دستورتون به این خط که میرسید خطا میداد

If Convert.ToUInt32(outParams.Properties("ReturnValue").Value) <> 0 Then

دوتا فاصله رو از انتهای ReturnValue حذف کردم، دیگه خطا نداد ولی پوشه رو share هم نمیکنه

samanta3000
یک شنبه 22 بهمن 1391, 21:48 عصر
ببخشین
درست شد
اسم پوشه رو عوض کردم درست شد
منوووووووووووووووووون

samanta3000
یک شنبه 22 بهمن 1391, 21:57 عصر
بازهم ببخشین
یک مشکل دیگه

میخوایم دسترسی فولدری که share میشه FullControl باشه
الآن به صورت ReadOnly پوشه رو Share میکنه


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

samanta3000
دوشنبه 23 بهمن 1391, 19:54 عصر
یعنی اصلا راهی نیست که به صورت دستی پوشه share شده رو full control نکنیم؟

samanta3000
دوشنبه 07 اسفند 1391, 19:28 عصر
انقدر کسی جواب نداد که بالاخره خودم جوابمو پیدا کردم
اینجا هم میزارم تا کسایی مثل من که لازمش دارن ازش استفاده کنن

این دستور به اشتراک گذاری پوشه مورد نظره

Dim managementClass As New ManagementClass("Win32_Share")
Dim inParams As ManagementBaseObject = managementClass.GetMethodParameters("Create")
inParams("Description") = "discription"
inParams("Name") = "Files"
inParams("Path") = "c:\"
inParams("Type") = &H0
inParams("Access") = securityDescriptor()
Dim outParams As ManagementBaseObject = managementClass.InvokeMethod("Create", inParams, Nothing)

این تابع هم دسترسی پوشه رو فول کنترل می کنه

Private Shared Function SecurityDescriptor() As ManagementBaseObject

Dim Sec As New SecurityIdentifier(System.Security.Principal.WellK nownSidType.WorldSid, Nothing)
Dim sidArray As Byte() = New Byte(Sec.BinaryLength - 1) {}
Sec.GetBinaryForm(sidArray, 0)
Dim Trustee As ManagementObject = New ManagementClass(New ManagementPath("Win32_Trustee"), Nothing)
Trustee("SID") = sidArray

Dim AdminACE As ManagementObject = New ManagementClass(New ManagementPath("Win32_Ace"), Nothing)
AdminACE("AccessMask") = 2032127 'Full Access
AdminACE("AceFlags") = 3
AdminACE("AceType") = 0
AdminACE("Trustee") = Trustee

Dim secDescriptor As ManagementObject = New ManagementClass(New ManagementPath("Win32_SecurityDescriptor"), Nothing)
secDescriptor("ControlFlags") = 4
secDescriptor("DACL") = New Object() {AdminACE}
Return secDescriptor
End Function


البته این تابع برای شبکه های workgroup کار میکنه