如何读写一个Windows“网络位置”

本文关键字:网络 网络位置 Windows 位置 何读写 读写 一个 | 更新日期: 2023-09-27 18:06:48

在Windows中,您可以使用"添加网络位置向导"将FTP站点添加为命名的网络位置。例如,用户可以添加一个名为"MyFtp"的位置。

在。net中,我如何访问(列表,读取和写入)该位置的文件?Windows是否抽象了实现(WebDAV, FTP或其他),使它看起来像我的。net程序的本地文件夹?如果是这种情况,我如何在File.WriteAllText(path, content)中指定path参数?如果没有,我如何访问这些文件?

如何读写一个Windows“网络位置”

不,Windows只在资源管理器中处理这个问题。(他们可能在新版本的Windows中删除了这个)你将不得不使用一些内置的类或自己实现FTP, WebDav和任何其他协议

Network Locations中的MyFtp快捷方式是FTP Folders shell命名空间扩展名的快捷方式。如果你想使用它,你必须绑定到快捷目标(通过shell命名空间),然后通过像ishelfolder::BindToObject或IShellItem::BindToHandler这样的方法进行导航。这是非常高级的东西,我认为c#中没有任何内置的东西使它更容易。这里有一些参考资料可以帮助你入门。

  • Shell命名空间简介
  • 可脚本化Shell对象
  • 浏览Shell命名空间

您可以尝试在网络位置读取/写入文件的内容

//to read a file
string fileContent  = System.IO.File.ReadAllText(@"''MyNetworkPath'ABC''testfile1.txt");
//and to write a file
string content = "123456";
System.IO.File.WriteAllText(@"''MyNetworkPath'ABC''testfile1.txt",content);

但是您需要为运行应用程序的主体提供网络路径的读/写权限

你可以使用FtpWebRequest-Class

下面是一些示例代码(来自MSDN):

public static bool DisplayFileFromServer(Uri serverUri)
{
    // The serverUri parameter should start with the ftp:// scheme.
    if (serverUri.Scheme != Uri.UriSchemeFtp)
    {
        return false;
    }
    // Get the object used to communicate with the server.
    WebClient request = new WebClient();
    // This example assumes the FTP site uses anonymous logon.
    request.Credentials = new NetworkCredential ("anonymous","janeDoe@contoso.com");
    try 
    {
        byte [] newFileData = request.DownloadData (serverUri.ToString());
        string fileString = System.Text.Encoding.UTF8.GetString(newFileData);
        Console.WriteLine(fileString);
    }
    catch (WebException e)
    {
        Console.WriteLine(e.ToString());
    }
    return true;
}