为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 StreamReader 在远程服务器上访问和读取文件?

如何使用 StreamReader 在远程服务器上访问和读取文件?

C#
慕盖茨4494581 2023-09-24 11:10:31
我在远程服务器上有一个文件,我想读取其内容。这是我想要实现的一些代码示例:StreamReader str = new StreamReader(@"\\192.168.0.1\C$\Test\test.txt"); str.ReadToEnd();这段代码抛出:System.IO.IOException:“用户名或密码不正确”。我怎样才能传递任何凭证?我的最终结果应该是我正在尝试使用以下命令访问此 192.168.0.1user: admin和password: 123456我搜索过StreamReader文档但没有任何结果。
查看完整描述

2 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

我最终使用了以下代码:


    public class ConnectToSharedFolder : IDisposable

    {

        readonly string _networkName;


        public ConnectToSharedFolder(string networkName, NetworkCredential credentials)

        {

            _networkName = networkName;


            var netResource = new NetResource

            {

                Scope = ResourceScope.GlobalNetwork,

                ResourceType = ResourceType.Disk,

                DisplayType = ResourceDisplaytype.Share,

                RemoteName = networkName

            };


            var userName = string.IsNullOrEmpty(credentials.Domain)

                ? credentials.UserName

                : string.Format(@"{0}\{1}", credentials.Domain, credentials.UserName);


            var result = WNetAddConnection2(

                netResource,

                credentials.Password,

                userName,

                0);


            if (result != 0)

            {

                throw new Win32Exception(result, "Error connecting to remote share");

            }

        }


        ~ConnectToSharedFolder()

        {

            Dispose(false);

        }


        public void Dispose()

        {

            Dispose(true);

            GC.SuppressFinalize(this);

        }


        protected virtual void Dispose(bool disposing)

        {

            WNetCancelConnection2(_networkName, 0, true);

        }


        [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);


        [StructLayout(LayoutKind.Sequential)]

        public class NetResource

        {

            public ResourceScope Scope;

            public ResourceType ResourceType;

            public ResourceDisplaytype DisplayType;

            public int Usage;

            public string LocalName;

            public string RemoteName;

            public string Comment;

            public string Provider;

        }


        public enum ResourceScope : int

        {

            Connected = 1,

            GlobalNetwork,

            Remembered,

            Recent,

            Context

        };


        public enum ResourceType : int

        {

            Any = 0,

            Disk = 1,

            Print = 2,

            Reserved = 8,

        }


        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 ConnectToSharedFolder(networkPath, credentials))

            {

                StreamReader str = new StreamReader(@"\\192.168.0.1\C$\Test\test.txt");

                var x = str.ReadToEnd();

                Console.WriteLine(x);

这段代码正是针对我的问题而设计的!


查看完整回答
反对 回复 2023-09-24
?
临摹微笑

TA贡献1982条经验 获得超2个赞

在访问该文件之前,您必须进行模拟。


查看完整回答
反对 回复 2023-09-24
  • 2 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信