从远程计算机删除文件

时间:2008-10-23 20:03:39

标签: c# windows file-io permissions

我正在尝试从远程计算机中删除包含XML文件的目录。我的代码编译并运行正常,但是当我在我指定的路径中获取XML文件列表时,它没有返回任何内容。我错过了一些明智的许可吗?

我已经从我自己登录的计算机和另一台以其他用户身份登录的计算机上运行了它。两个帐户都可以完全控制包含XML文件的目录。

我正在使用.NET 2.0。

   static void Main(string[] args) {
        string directory, ext = ".xml"; // have tried xml and .xml

        if (args.Length != 1) {
             // do absolutely nothing if we do not exactly 1 argument
        } else {
            Console.WriteLine("Argument accepted.");
            directory = args[0];

            // make sure the directory passed is valid
            if (ValidateDirectory(directory)) {
                Console.WriteLine("Directory is valid.");
                DeleteFiles(directory, ext);
            }
        }
        Console.WriteLine("Done.");
    }

    static bool ValidateDirectory(string d) {
        return Regex.IsMatch(d, @""); // I removed my regex - it validates properly
    }

    static void DeleteFiles(string d, string ext) {
        DirectoryInfo di;
        FileInfo[] fi;

        di = new DirectoryInfo(d);
        fi = di.GetFiles(ext);

        Console.WriteLine("Number of files = " + fi.Length + ".");
        foreach (FileInfo f in fi) {
            try {
                Console.WriteLine(f.FullName);
                f.Delete();
            } catch (Exception ex) {
                // do nothing when there is an exception
                // just do not want it to quit
                Console.WriteLine(ex.ToString());
            }
        }
    }

5 个答案:

答案 0 :(得分:4)

我认为你应该使用* .xml而不是简单的.xml。但我也同意Kyralessa,首先测试你的本地机器,然后增加通过网络的复杂性。

答案 1 :(得分:2)

在DeleteFiles中,您有以下行:

fi = di.GetFiles(ext);

其中ext是你传入的扩展名,我认为它只是'.xml'。获取文件正在查找名为“.xml”的任何文件。 GetFiles采用通配符,我相信这是你打算做的。在前面加上一个星号(*)并尝试一下。

-Brett

答案 2 :(得分:1)

跟进:

我需要使用* .xml(应该已经知道了!)现在它可以正常工作。

这个网站很棒!

答案 3 :(得分:0)

我假设您正在传递网络路径? 在本地路径上运行程序时是否会失败? 这行: fi = di.GetFiles(ext); 返回任何fileInfo对象?

你可能只是有一些小错误,可以通过一些调试来修复。

答案 4 :(得分:0)

你在论证中传递的是什么?您使用的是映射驱动器还是直接引用(即//服务器/文件夹)?

您应该使用Directory.Exists(目录)代替您的ValidateDirectory,以查看它是否可以看到该目录。