C#如何读取共享文件夹

leeya66 2014-01-09 12:39:47
请问一下,公司服务器上有个共享文件夹,我在上面专门创建了一个用户cUser,密码123456。服务器地址是192.168.1.100,文件夹名称《新建文件夹》,里面有一个excel文件《生产系统.xls》。
我在服务器上设置了该cUser用户对共享文件夹有只读权限。
请问我用c#如何去连接这个共享文件夹里面的excel文件。
读取excel时需要指定路径。请问这个路径应该怎么获取?
非常感谢
...全文
444 点赞 收藏 9
写回复
9 条回复
Tian_xd 2015年01月23日
引用 5 楼 rrxxjj1234 的回复:
[quote=引用 4 楼 fangwei198712 的回复:] 局域网内很简单的,使用Process类,首先用net use命令和服务器建立通道,然后就可以访问共享文件件(\\192.168.1.100\新建文件夹\生产系统.xls)了,结束后关闭通道
就是网上找不到代码啊, 新建类 Process pro = new Process(); 然后怎么写呢?[/quote] LZ 做好了? 怎么做的? 能分享一下吗?
回复 点赞
wayu002 2014年01月09日
没太明白你的意思,难道路径不是“\\192.168.1.100\新建文件夹\生产系统.xls”?
回复 点赞
偶是菜鸟 2014年01月09日
楼主结贴吧,分全给我把,大叔真的好穷
回复 点赞
偶是菜鸟 2014年01月09日
建立好通道就可以访问共享文件夹了 在 finally{ process.StandardInput.WriteLine("net use \\\\" +IP + "\\ipc$ /del"); }删除通道
回复 点赞
偶是菜鸟 2014年01月09日
  
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
process.Start();
process.StandardInput.WriteLine("net use  \\\\" + IP + "\\ipc$ " + pwd + " /user:" + useName + "");
Thread.Sleep(1000);
回复 点赞
leeya66 2014年01月09日
引用 4 楼 fangwei198712 的回复:
局域网内很简单的,使用Process类,首先用net use命令和服务器建立通道,然后就可以访问共享文件件(\\192.168.1.100\新建文件夹\生产系统.xls)了,结束后关闭通道
就是网上找不到代码啊, 新建类 Process pro = new Process(); 然后怎么写呢?
回复 点赞
偶是菜鸟 2014年01月09日
局域网内很简单的,使用Process类,首先用net use命令和服务器建立通道,然后就可以访问共享文件件(\\192.168.1.100\新建文件夹\生产系统.xls)了,结束后关闭通道
回复 点赞
MOMOKA 2014年01月09日
使用这个类来访问网络共享的文件夹
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;//域?控?中D的?需è要癮用?:Interactive = 2    
        private bool disposed;    
        public IdentityScope(string sUsername, string sDomain, string sPassword)    
        {    
            // 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);    
        }    
    }   
用法参考这段 DirectoryInfo Dir 你改成定义你的EXCLE路径就可以了。
 using (IdentityScope iss = new IdentityScope(username, hostIp, password))
                {
                    DirectoryInfo Dir = new DirectoryInfo(@"\\\\" + hostIp + "\\" + dirname);
}
回复 点赞
leeya66 2014年01月09日
引用 1 楼 wayu002 的回复:
没太明白你的意思,难道路径不是“\\192.168.1.100\新建文件夹\生产系统.xls”?
那我怎么把用户名cUser和密码123456通过c#告诉服务器?
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.4w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告