1398-03-03 17:35 نحوه اتصال به ذخیره ساز تحت شبکه
zahmah

 
دوستان کسی هست کمک کنه؟
یک هارد(ذخیره ساز 24 ترا) تحت شبکه هست میخوام عملیات ایجاد پوشه، کپی پوشه و ... رو روش انجام بدم. تا حدی مبتدی هستم. اگه کسی کدشو میدونه لطف کنه راهنمایی کنه
1398-03-04 22:37
zahmah

 
کسی نیس کمک کنه؟؟؟؟
1398-03-04 23:21
حاجی شریفی
مؤسس سایت
 
سلام
یعنی میخواهید به یک استوریج NAS متصل شوید.
خوشبختانه مشکل خاصی ندارید ، کافی است با مسیر دهی عادی شبکه کار کنید...
مثلا
System.IO.Directory.CreateDirectory(@"\\SERVER_NAME_OR_IP\ROOT\New Folder1" ) ;

System.IO.Directory.Move(@"\\SERVER_NAME_OR_IP\ROOT\New Folder1", @"\\SERVER_NAME_OR_IP\ROOT\New Folder2" ) ;

System.IO.File.WriteAllText(@"\\SERVER_NAME_OR_IP\ROOT\New Folder2\file.txt", "HELLO!" ) ;


و در ضمن میتوانید استوریج را به یک درایومجازی (مانند Z) در رایانه تان Map کنید وسپس مانند درایوهای عادی با آن رفتار کنید.
برای MapDrive میتوانید از MyComputer گزینه مربوطه را کلیک کنید:


یا از فرمانی شبیه این استفاده کنید:
net use Z: \\SERVER_NAME_OR_IP\ROOT


و سپس طبق یک درایو عادی در دات نت کد بزنید:
System.IO.Directory.CreateDirectory(@"Z:\New Folder1" ) ;

System.IO.Directory.Move(@"Z:\New Folder1", @"Z:\New Folder2" ) ;

System.IO.File.WriteAllText(@"Z:\New Folder2\file.txt", "HELLO!" ) ;

این روش هم بد نیست، چون در واقع بحث IP و مسیر و User,Pass احتمالی را از برنامه تان خارج میکنید و تنظیم آن را به محیط عادی ویندوز واگذار میکنید.
درهرصورت هر دو روش در دسترس تان است.
موفق باشید.
1398-03-08 23:11
zahmah

 
ممنون تستش میکنم ولی به هر حال ممنون از راهنمائی تون.
تشکر
1398-03-08 23:15
zahmah

 
راستی یوزر پسورد رو چطور رد کنه؟
1398-03-09 13:27
حاجی شریفی
مؤسس سایت
 
سلام
پیشنهاد اولم آن است که از همان MapDrive استفاده کنید و مدیریت این جزییات را به ویندوز واگذار کنید.
هم میتوانید از دیالوگ مربوطه در MyComputer استفاده کنید و هم از خط فرمان net use استفاده کنید.
حتی می توانید فرمان را با CSharp وتابع Process.Start هم اجرا کنید !
برقراری نگاشت
NET USE Z: \\SERVER_NAME_OR_IP\ROOT /USER:username password /PERSISTENT:YES

لغو نگاشت
NET USE Z: /DELETE

البته باید در خصوص اجرای RunAsAdmin فرمان فوق دقت کنید و تحت همان مجوزی آن را اجرا کنید که برنامه قرار است اجرا شود.


ولی اگر به کار بدون MapDrive مصر هستید ، برای احراز هویت باید از تابع WNetAddConnection2 ( لینک 1 و لینک 2 ) استفاده کنید.
که معمولا افراد یک کلاس کوچک دستی به نام NetworkConnection می سازند تا این امر را انجام دهد.
using  System.Runtime.InteropServices;

public class NetworkConnection
: IDisposable
{
[DllImport("mpr.dll" )]
private static extern int WNetAddConnection2(NetResource netResource, string password, string username, int flags);

[DllImport("mpr.dll" )]
private static extern int WNetCancelConnection2(string name, int flags, bool force);

private readonly string m_Path;

public NetworkConnection(string path, string user, string pass)
{
this .m_Path = path;

var netResource = new NetResource()
{
Scope = 0x2, //GlobalNetwork
ResourceType = 0x1, //Disk
DisplayType = ResourceDisplaytype.Share,
RemoteName = this.m_Path
};

int result = WNetAddConnection2(
netResource,
pass,
user,
0);

if (result == 0) return ;
throw new System.ComponentModel.Win32Exception(result);
}

protected virtual void Dispose(bool disposing)
{
WNetCancelConnection2(this .m_Path, 0, true );
}

public void Dispose()
{
this .Dispose(true );
GC.SuppressFinalize(this );
}

~NetworkConnection()
{
this .Dispose(false );
}

[StructLayout(LayoutKind.Sequential)]
public class NetResource
{
public int Scope;
public int ResourceType;
public ResourceDisplaytype DisplayType;
public int Usage;
public string LocalName;
public string RemoteName;
public string Comment;
public string Provider;
}
public enum ResourceDisplaytype : int
{
Generic = 0x0,
Domain = 0x01,
Server = 0x02,
Share = 0x03,
File = 0x04,
Group = 0x05,
Network = 0x06,
Root = 0x07,
Shareadmin = 0x08,
Directory = 0x09,
Tree = 0x0a,
Ndscontainer = 0x0b
}
}


که با کدی شبیه این قابل استفاده خواهد بود:
using  (new  NetworkConnection(@"\\SERVER_NAME_OR_IP\ROOT", "username", "password" ))
{
System.IO.Directory.CreateDirectory(@"\\SERVER_NAME_OR_IP\ROOT\New Folder1" ) ;

System.IO.Directory.Move(@"\\SERVER_NAME_OR_IP\ROOT\New Folder1", @"\\SERVER_NAME_OR_IP\ROOT\New Folder2" ) ;

System.IO.File.WriteAllText(@"\\SERVER_NAME_OR_IP\ROOT\New Folder2\file.txt", "HELLO!" ) ;
}
1398-03-09 13:44
zahmah

 
خیلی عالی
انشاءالله جواب میده. کد قبلی تون جواب داد
بی نهایت ممنون.
1399-01-27 15:40 بارگداری Map drive
zahmah

 
سلام
من از Map Network Drive برای اتصال به استوریج استفاده کرده ام ولی با هر بار بوت ویندوز علامت ضربدر روی درایو است و در نرم افزار غیرقابل دسترسی است. البته با دابل کلیک روی آن درایو، درایو باز شده و دیگر نرم افزار مشکلی در اتصال ندارد. میخواستم ببینم چون در هر بار بوت این کار نیاز است راه حلی برای آن وجود ندارد؟
1399-01-29 20:43
حاجی شریفی
مؤسس سایت
 
سلام
سه کار را انجامدهید، انشاا... مشکل تان حل میشود.
اول) دقت کنید در فرم Map Network Drive تیک Reconnect at sign-in خورده باشد.
( که احتمالا این checkbox را فعال کرده اید )

دوم) وارد برنامه regedit.exe شوید
به مسیر زیر بروید
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Network\Persistent Connections
باید در سمت راست سطری با نام SaveConnections و مقدار yes داشته باشید
SaveConnections = yes
اگر نیست یک StringValue ساده به صورت فوق ایجاد کنید
( البته این هم در اغلب موارد به همین شکل وجود دارد و فعال است )

سوم) مجدد در برنامه regedit.exe به مسیر زیر بروید
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider
یک مقدار عددی DWORD با نام RestoreConnection وعدد یک ایجاد کنید
RestoreConnection = 1

سیستم را ریست کنید
موفق باشید.