怎么用C#访问共享文件夹

求救一个问题。我想通过C#访问其他计算机的共享文件夹。IP:192.168.1.1 用户名:administrator 密码:123
SecureString password = new SecureString();
foreach (char c in this.textBox1.Text.ToCharArray())
password.AppendChar(c); Process.Start(@"\\192.168.15.90","administrator",password,"?")

我画问号的那个地方应该怎么写啊,提示说是应该写域名可是我没有域。还有就是password好像也有问题。好像也不对。求高手指点下

    用C#访问共享目录总是出现权限问题,让人很头疼,研究了很久找到一种办法,贴上代码:

 public class IdentityScope : IDisposable  
    {    
        // obtains user token     
        [DllImport("advapi32.dll", SetLastError = true)]    
        static extern bool LogonUser(string pszUsername, string pszDomain, string pszPassword,    
            int dwLogonType, int dwLogonProvider, ref IntPtr phToken);    
    
        // closes open handes returned by LogonUser     
        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]    
        extern static bool CloseHandle(IntPtr handle);    
    
        [DllImport("Advapi32.DLL")]    
        static extern bool ImpersonateLoggedOnUser(IntPtr hToken);    
    
        [DllImport("Advapi32.DLL")]    
        static extern bool RevertToSelf();    
        const int LOGON32_PROVIDER_DEFAULT = 0;    
        const int LOGON32_LOGON_NEWCREDENTIALS = 9;//域控中的需要用:Interactive = 2     
        private bool disposed;    
        public IdentityScope(string sUsername,string sPassword, string sDomain)    
        {    
            // initialize tokens     
            IntPtr pExistingTokenHandle = new IntPtr(0);    
            IntPtr pDuplicateTokenHandle = new IntPtr(0);    
    
            try    
            {    
                // get handle to token     
                bool bImpersonated = LogonUser(sUsername, sDomain, sPassword,    
                    LOGON32_LOGON_NEWCREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref pExistingTokenHandle);    
    
                if (true == bImpersonated)    
                {    
                    if (!ImpersonateLoggedOnUser(pExistingTokenHandle))    
                    {    
                        int nErrorCode = Marshal.GetLastWin32Error();    
                        throw new Exception("ImpersonateLoggedOnUser error;Code=" + nErrorCode);    
                    }    
                }    
                else    
                {    
                    int nErrorCode = Marshal.GetLastWin32Error();    
                    throw new Exception("LogonUser error;Code=" + nErrorCode);    
                }    
            }    
            finally    
            {    
                // close handle(s)     
                if (pExistingTokenHandle != IntPtr.Zero)    
                    CloseHandle(pExistingTokenHandle);    
                if (pDuplicateTokenHandle != IntPtr.Zero)    
                    CloseHandle(pDuplicateTokenHandle);    
            }    
        }    
    
        protected virtual void Dispose(bool disposing)    
        {    
            if (!disposed)    
            {    
                RevertToSelf();    
                disposed = true;    
            }    
        }    
    
        public void Dispose()    
        {    
            Dispose(true);    
        }    
    }

通过IdentityScope传入目标机器的IP,用户名和密码就可以访问到共享目录了。

如何使用如下:

using (IdentityScope iss = new IdentityScope(targetLoginName, targetPassword,targetIP))
 {
           //你的代码        
 }

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-06-16
public static bool Connect(string remoteHost, string userName, string passWord)
{
bool Flag = false;
Process proc = new Process();
try
{
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
string dosLine = "net use " + remoteHost + " " + passWord + " /user:" + userName;
proc.StandardInput.WriteLine(dosLine);
proc.StandardInput.WriteLine("exit");
while (!proc.HasExited)
{
proc.WaitForExit(1000);
}

string errormsg = proc.StandardError.ReadToEnd();
WriteLog.WirteDayLog("msg:" + errormsg);
proc.StandardError.Close();
if (String.IsNullOrEmpty(errormsg))
{
Flag = true;
}
}
catch (Exception ex)
{
WriteLog.WirteDayLog(ex.ToString());
throw ex;
}
finally
{
proc.Close();
proc.Dispose();
}
return Flag;
}
Connect(@"\\192.168.15.90", "administrator", "123")追问

程序我运行了但是没有任何反应。我想要打开共享的文件夹。我在程序里有些了个
string dosLine1 = "explorer " + remoteHost; proc.StandardInput.WriteLine(dosLine1);就好了。但是有个代码我没不知道是啥 ,WriteLog是啥啊。在哪定义的

求高手在指点指点呗。谢谢

追答

WriteLog是我记错误日志的方法,你删掉就好了

本回答被提问者采纳
第2个回答  2013-12-02
第3个回答  2015-08-30
1、在服务器设置一个共享文件夹,服务器ip地址是10.80.88.180,共享文件夹名字是test,test里面有两个文件:good.txt和bad.txt,访问权限,用户名是admin,密码是admin。
2、新建一个webapplication项目,在前台页面加一个listbox,ID是ListBox1.
3、添加后台代码如下:其中包含的功能是读文件,这里以读good
文件为例;写文件,这里以写bad文件为例;还有是将test文件夹下的文件名列到listbox中。
using System;
using
System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Diagnostics;
using System.IO;
namespace
WebApplication2
{
public class FileShare
{
public FileShare() {
}
public static bool connectState(string path)//连接
{

return
connectState(path,"","");
}
//判断连接是否成功
public static bool connectState(string path,string userName,string passWord)
{
bool Flag = false;
Process proc = new Process();
try
{
//下列是进程属性设置
proc.StartInfo.FileName = "cmd.exe";

proc.StartInfo.UseShellExecute = false;

proc.StartInfo.RedirectStandardInput = true;

proc.StartInfo.RedirectStandardOutput=true;

proc.StartInfo.RedirectStandardError=true;

proc.StartInfo.CreateNoWindow=true;

proc.Start();//启动

string dosLine =
@"net use " + path + " /User:" + userName + " " + passWord + "
/PERSISTENT:YES";

proc.StandardInput.WriteLine(dosLine);

proc.StandardInput.WriteLine("exit");

while
(!proc.HasExited)

{

proc.WaitForExit(1000);

}

string errormsg =
proc.StandardError.ReadToEnd();

proc.StandardError.Close();

if
(string.IsNullOrEmpty(errormsg))

{

Flag =
true;

}

else

{

throw new
Exception(errormsg);

}

}

catch (Exception
ex)

{

throw
ex;

}

finally

{

proc.Close();

proc.Dispose();

}

return
Flag;

}

//read file

public static void
ReadFiles(string path)
{

try

{

// Create an instance
of StreamReader to read from a file.

// The using
statement also closes the StreamReader.

using (StreamReader
sr = new StreamReader(path))

{

String
line;

// Read and
display lines from the file until the end of

// the file is
reached.

while ((line =
sr.ReadLine()) != null)

{

Console.WriteLine(line);

}

}

}

catch (Exception
e)

{

// Let the user know
what went wrong.

Console.WriteLine("The file could not be read:");

Console.WriteLine(e.Message);

}

}
//write
file
public static void
WriteFiles(string path)
{

try

{

// Create an instance
of StreamWriter to write text to a file.

// The using
statement also closes the StreamWriter.

using (StreamWriter
sw = new StreamWriter(path))

{

// Add some text
to the file.

sw.Write("This is
the ");

sw.WriteLine("header for the file.");

sw.WriteLine("-------------------");

// Arbitrary
objects can also be written to the file.

sw.Write("The
date is: ");

sw.WriteLine(DateTime.Now);

}

}

catch (Exception
e)

{

// Let the user know
what went wrong.

Console.WriteLine("The file could not be read:");

Console.WriteLine(e.Message);

}

}

}

public partial class _Default :
System.Web.UI.Page
{

protected void
Page_Load(object sender, EventArgs e)

{

bool status =
false;

//连接共享文件夹

status =
FileShare.connectState(@"\\10.80.88.180\test", "admin",
"admin");

if
(status)

{

DirectoryInfo
theFolder = new DirectoryInfo(@"\\10.80.88.180\test");

//先测试读文件,把目录路径与文件名连接

string filename =
theFolder.ToString()+"\\good.txt";

FileShare.ReadFiles(filename);

//测试写文件,拼出完整的路径

filename =
theFolder.ToString() + "\\bad.txt";

FileShare.WriteFiles(filename);

//遍历共享文件夹,把共享文件夹下的文件列表列到listbox

foreach (FileInfo
nextFile in theFolder.GetFiles())
{

ListBox1.Items.Add(nextFile.Name);

}

}

else

{

ListBox1.Items.Add("未能连接!");

}

}

}}

C#读共享文件夹内容!急!!!
可以在a的资源管理器中访问b的共享文件夹,然后在输入密码的时候选择“保存凭据”;也可以在Win7下通过“控制台”-》“凭据管理器”管理凭据,或者在XP下通过“控制台”-》“用户和密码”来管理访问密码。

C#远程操作共享文件夹
我有一个方法。把共享的文件夹通过映射到本地。方法:随便打开一个盘。上面有工具-->映射网络驱动器-->驱动器随便选一个(映射完成后显示的本地盘符),文件夹选择哪个共享文件夹。这样你就可以打开我的电脑 有个网络驱动器的盘。盘符是你刚刚选的驱动器,你就可以操作本地文件的方式来操作了 我是X...

如何打开共享文件夹 C#
右键点一个文件夹,“共享和安全”有个“网络共享和安全”你照那个设置,完成后重启电脑。就好了

C#远程操作共享文件夹
我有一个方法。把共享的文件夹通过映射到本地。方法:随便打开一个盘。上面有工具-->映射网络驱动器-->驱动器随便选一个(映射完成后显示的本地盘符),文件夹选择哪个共享文件夹。这样你就可以打开我的电脑 有个网络驱动器的盘。盘符是你刚刚选的驱动器,你就可以操作本地文件的方式来操作了 我是X...

怎么用C#访问共享文件夹
Dispose(true); } }通过IdentityScope传入目标机器的IP,用户名和密码就可以访问到共享目录了。如何使用如下:using (IdentityScope iss = new IdentityScope(targetLoginName, targetPassword,targetIP)) { \/\/你的代码 }

C# 访问远程文件夹
方法:随便打开一个盘。上面有工具-->映射网络驱动器-->驱动器随便选一个(映射完成后显示的本地盘符),文件夹选择哪个共享文件夹。这样你就可以打开我的电脑 有个网络驱动器的盘。盘符是你刚刚选的驱动器,你就可以操作本地文件的方式来操作了 把那个共享文件夹映射到本地 就可以操作本地文件夹的...

用C#怎么访问局域网计算机文件系统
C#实现访问网络共享文件夹,一般使用 WNetAddConnection2A 和 WNetCancelConnection2A。在你的程序里面导入mpr.dll动态库:[DllImport("mpr.dll")]public static extern int WNetAddConnection2A (NETRESOURCE[] lpNetResource, string lpPassword, string lpUserName, int dwFlags);[DllImport("mpr.dll"...

c# 访问局域网共享文件夹
通过 \\\\账号:密码@192.168.120.1\\abc来访问即可。例如\\\\administrator:123456@192.168.120.1\\abc

c#如何打开局域网共享文件夹中的文本文件,用winform窗体程序,不用...
首先确保有权限访问,然后最简单的方法就是建io流指向该网络文件的路径来打开读取

c#实现访问共享文件夹 并自动输入账号密码
1:可以采取在本地存储的方式 如本地使用config.ini文件存储记录用户名和加密过的密码 2:云端存储的方式 通过api访问云端数据存储,存储用户名和加密过的密码 那么接下来,在登录的过程中先从本地或者云端读取用户名和密码 ,来实现自动登陆。

相似回答