谁能看我的代码并告诉我如何弄乱我的课堂?

豹拳

成员
已加入
2014年11月25日
留言内容
14
编程经验
Beginner
注释说明了它是如何弄糟的,或者出了什么问题,但是我不知道我做错了什么。

C#:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace testappForHDProgram
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Please enter the Employee's Username: ");
            string uName = Console.ReadLine();
            Console.WriteLine("Please enter the Employee's Profile Server: ");
            string server = Console.ReadLine();
            Console.WriteLine("Please enter the Computer Number: ");
            string sysName = Console.ReadLine();
            paths ppath = new paths();
            ppath = buildPaths(uName, server, sysName);
            verify(ppath);
            Console.WriteLine("Starting Job now!");
            //My code I entered here is not working like I expected.
            //I entered the first couple names of my "ppath" class
            //but it does not pop-up any properties or methods for 
            //me to use to interact with it, it is like it does not recognize ppath.
            //Below, when I built the buildPaths function, they worked
            //fine for me, and intellisense would pop them up and let me auto enter
            //with enter or (). But here, nothing auto pops up.


            //任何想法我做错了什么?这里的代码不完整,但是下面
            //代码应该让您了解我如何建立我的班级以及我的班级 
            //其他函数确实为路径类中的每个类属性分配值。
            //我以为我可以调用它们并在它们上使用方法...例如ppath.profile.rename();
            //或ppath.profile.delete(); 
            
            


        }


        private static void verify(paths path)
        {
            bool check = Directory.Exists(path.profile);
            if (check)
            {
                return;
            }
            else
            {
                Console.WriteLine("The data you entered was not correct, a complete path could not be verified!");
                Environment.Exit(0);
            }
        }


        static paths buildPaths(string uName, string server, string sysName)
        {
            paths path = new paths();
            path.appData = "\\\\" + server + "\\Users\\" + uName + "\\Application Data";
            path.citrix = "\\\\" + server + "\\Users\\" + uName + "\\Application Data\\Citrix";
            path.citrixTemp = "\\\\" + server + "\\Users\\" + uName + "\\CitrixTemp";
            path.cookies = "\\\\" + server + "\\Users\\" + uName + "\\Cookies";
            path.icaClient = "\\\\" + server + "\\Users\\" + uName + "\\Application Data\\ICAClient";
            path.microsoft = "\\\\" + server + "\\Users\\" + uName + "\\Application Data\\Microsoft";
            path.profileUnity = "\\\\" + server + "\\Users\\" + uName + "\\ProfileUnity";
            path.sun = "\\\\" + server + "\\Users\\" + uName + "\\Application Data\\Sun";
            path.profile = "\\\\" + server + "\\Profiles\\" + uName;
            path.profileOld = path.profile + ".old";
            path.profileV2 = path.profile + "V2";
            path.systemProfile = "\\\\" + sysName + "\\c$\\Documents and Settings\\" + uName;
            path.profiles = "\\\\" + server + "\\Profiles";
            path.users = "\\\\" + server + "\\Users";
            return (path);
        }
    }
    class paths
    {
        public string profile { get; set; }
        public string profileV2 { get; set; }
        public string profileOld { get; set; }
        public string citrixTemp { get; set; }
        public string profileUnity { get; set; }
        public string cookies { get; set; }
        public string citrix { get; set; }
        public string icaClient { get; set; }
        public string sun { get; set; }
        public string microsoft { get; set; }
        public string appData { get; set; }
        public string systemProfile { get; set; }
        public string users { get; set; }
        public string profiles { get; set; }




        static bool reName(string path)
        {
            Directory.SetCurrentDirectory(path.profiles);
            if (Directory.Exists(path.profileOld))
            {
                Directory.Delete(path.profileOld);
            }
            Directory.Move(path.profile, path.profileOld);
            return true;
        }
        static void Delete(string path)
        {
            Directory.SetCurrentDirectory("..\\" + path);
            try
            {
                Directory.Delete(path);
            }
            catch (Exception)
            {
                Console.WriteLine("Error Deleting :" + path);
            }
        }


    }


}
 

狂暴风暴

知名会员
已加入
2014年8月6日
留言内容
85
地点
南非鲁德普特
编程经验
10+
首先,由于reName方法中存在多个错误(所有代码都归结为同一问题),因此您的代码无法编译。

接下来,您的方法是私有的(如果您未指定其他保护(如public),则为默认设置),这就是为什么它们不显示的原因。
您的方法也是静态的,并且静态方法的用法有所不同。

因此,如果您希望能够访问它们,那么首先需要公开您的方法。
C#:
[B] public [/B]static void Delete(string path)

接下来,您必须确定如何访问方法。要使用静态方法,请使用类名(而不是实例化的对象),后跟方法名。例如
C#:
 路径 .Delete("some string");

但是我不认为这就是您想要的,毕竟您实例化了一个名为ppath的对象,并且希望您的方法可以在该对象上工作。在这种情况下,您需要将static关键字从方法声明中删除

C#:
[B] public [/B]void Delete(string path)

接下来您可以使用
C#:
 路径 .Delete("some string");


接下来,(或多或少)在另一个线程中回答问题。对于当前方法,可以在paths类中创建一个方法来删除配置文件目录。
C#:
public void DeleteProfile()
{
    try
    {
        Directory.Delete(profile);
    }
    catch (Exception)
    {
        Console.WriteLine("Error Deleting :" + profile);
    }
}

你可以像这样使用它
C#:
 路径 .DeleteProfile();
 

豹拳

成员
已加入
2014年11月25日
留言内容
14
编程经验
Beginner
Wim,首先,非常感谢您为回复所做的工作。您的信息非常有帮助,而且我对“静态关键字”的理解还不是很深入,现在我真的很了解它如何影响一种方法。我认为您的第一条评论是由于我没有复制完整的代码,我在下面做了。我没有收到任何错误,但是再说一次,我也没有编译它,因为这些目录在我的当前机器上不存在,因此很难测试。

现在,按照您的建议,我已在自定义类中将方法交换为public。但是我仍然有问题...而且它之前一直在工作,所以我不知道我是如何打破它的。当我输入实例化类的名称时,没有显示它识别它的智能提示弹出窗口。以前,当我构建定义这些属性buildPaths()的方法时,会弹出智能感知,并让我从列表中选择我的属性。

现在它甚至都不会采用这种方法,而且我的财产仍然是公开的。我按照您的建议将public添加到我的方法中。

我在代码中添加了注释,以确切解释自从它生效以来我所做的更改。我将实例化名称从path交换为ppath,因为我注意到path是System.IO中的方法。我不想使用它。我还尝试在path类中注释掉我的新方法,以查看它们是否弄乱了它,但仍然无法正常工作。

我怀疑,当我更改ppath时,由于某种原因它没有更新....或者当我更改了实例化ppath的方式时,它可能把它弄乱了。我在代码中评论了我以前如何使用它实例化
C#:
 路径  path = buildPaths(uName, server, sysName);

\\but I changed it to:
paths ppath = new paths();
ppath = buildPath(uName, server, sysName);

但是下面是我完整的代码,还有更多有关细节的说明。
C#:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace testappForHDProgram
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Please enter the Employee's Username: ");
            string uName = Console.ReadLine();
            Console.WriteLine("Please enter the Employee's Profile Server: ");
            string server = Console.ReadLine();
            Console.WriteLine("Please enter the Computer Number: ");
            string sysName = Console.ReadLine();
            paths ppath = new paths();//this line and the next, used to be one line. "paths path = buildPaths(uName, server, sysName);"
            ppath = buildPaths(uName, server, sysName);//but I changed when my intellisense stopped popping up, and made it like this. Also changed to ppath.
            verify(ppath);
            Console.WriteLine("Starting Job now!");
            //My code I entered here is not working like I expected.
            //I entered the first couple names of my "ppath" class
            //but it does not pop-up any properties or methods for 
            //me to use to interact with it, it is like it does not recognize ppath.
            //Below, when I built the buildPaths function, they worked
            //fine for me, and intellisense would pop them up and let me auto enter
            //with enter or (). But here, nothing auto pops up.


            //任何想法我做错了什么?这里的代码不完整,但是下面
            //代码应该让您了解我如何建立我的班级以及我的班级 
            //其他函数确实为路径类中的每个类属性分配值。
            //我以为我可以调用它们并在它们上使用方法...例如ppath.profile.rename();
            //或ppath.profile.delete(); 
            


        }


        private static void verify(paths path)
        {
            bool check = Directory.Exists(path.profile);
            if (check)
            {
                return;
            }
            else
            {
                Console.WriteLine("The data you entered was not correct, a complete path could not be verified!");
                Environment.Exit(0);
            }
        }


        static paths buildPaths(string uName, string server, string sysName)
        {
            paths path = new paths();
            path.appData = "\\\\" + server + "\\Users\\" + uName + "\\Application Data";
            path.citrix = "\\\\" + server + "\\Users\\" + uName + "\\Application Data\\Citrix";
            path.citrixTemp = "\\\\" + server + "\\Users\\" + uName + "\\CitrixTemp";
            path.cookies = "\\\\" + server + "\\Users\\" + uName + "\\Cookies";
            path.icaClient = "\\\\" + server + "\\Users\\" + uName + "\\Application Data\\ICAClient";
            path.microsoft = "\\\\" + server + "\\Users\\" + uName + "\\Application Data\\Microsoft";
            path.profileUnity = "\\\\" + server + "\\Users\\" + uName + "\\ProfileUnity";
            path.sun = "\\\\" + server + "\\Users\\" + uName + "\\Application Data\\Sun";
            path.profile = "\\\\" + server + "\\Profiles\\" + uName;
            path.profileOld = path.profile + ".old";
            path.profileV2 = path.profile + "V2";
            path.systemProfile = "\\\\" + sysName + "\\c$\\Documents and Settings\\" + uName;
            path.profiles = "\\\\" + server + "\\Profiles";
            path.users = "\\\\" + server + "\\Users";
            return (path);
            //In this method, when I wrote it, I could type "path." and the Intellisense 
            //would auto pop up with all the properties from my Class below, so that I 
            //could define them. After making your changes this does not happen.
        }
    }
    class paths
    {
        public string profile { get; set; }
        public string profileV2 { get; set; }
        public string profileOld { get; set; }
        public string citrixTemp { get; set; }
        public string profileUnity { get; set; }
        public string cookies { get; set; }
        public string citrix { get; set; }
        public string icaClient { get; set; }
        public string sun { get; set; }
        public string microsoft { get; set; }
        public string appData { get; set; }
        public string systemProfile { get; set; }
        public string users { get; set; }
        public string profiles { get; set; }


        //I even tried commenting out these two new methods, and intellisense still does not work for the properties.
        public bool reName(string path)
        {
            Directory.SetCurrentDirectory(path.profiles);
            if (Directory.Exists(path.profileOld))
            {
                Directory.Delete(path.profileOld);
            }
            Directory.Move(path.profile, path.profileOld);
            return true;
        }


        public void Delete(string path)
        {
            Directory.SetCurrentDirectory("..\\" + path);
            try
            {
                Directory.Delete(path);
            }
            catch (Exception)
            {
                Console.WriteLine("Error Deleting :" + path);
            }
        }


    }


}

感谢您的帮助,您的最后一条信息使我更多地了解了类声明,而不是我的书中的两章。
 

狂暴风暴

知名会员
已加入
2014年8月6日
留言内容
85
地点
南非鲁德普特
编程经验
10+
您的重命名方法仍然存在相同的问题  ;)

//任何想法我做错了什么?这里的代码不完整,但是下面
//代码应该让您了解我如何建立我的班级以及我的班级
//其他函数确实为路径类中的每个类属性分配值。
//我以为我可以调用它们并在它们上使用方法...例如ppath.profile.rename();
//或ppath.profile.delete();
你有个误会方法不适用于变量,而不适用于(实例化的)类。这就是为什么intellisense不显示 删除 方法 路径 .profile;但是它显示了 路径 .
您可以通过创建其他类来实现您想要的(?)。

            static void Main(string[] args)
        {
//
//
           paths ppath = new paths();//this line and the next, used to be one line. "paths path = buildPaths(uName, server, sysName);"
           ppath = buildPaths(uName, server, sysName);//but I changed when my intellisense stopped popping up, and made it like this. Also changed to ppath.
            verify(ppath);
            Console.WriteLine("Starting Job now!");

            ppath.profile.delete();
           
        }


        private static void verify(paths path)
        {
            bool check = Directory.Exists(path.profile.directoryname);
            if (check)
            {
                return;
            }
            else
            {
                Console.WriteLine("The data you entered was not correct, a complete path could not be verified!");
                Environment.Exit(0);
            }
        }


        static paths buildPaths(string uName, string server, string sysName)
        {
            paths path = new paths();
            path.appData = new paths.MyDirectory("\\\\" + server + "\\Users\\" + uName + "\\Application Data");
            path.citrix = new paths.MyDirectory("\\\\" + server + "\\Users\\" + uName + "\\Application Data\\Citrix");
//
//
            return (path);
        }
    }

    class paths
    {
        public MyDirectory profile;
        public MyDirectory profileV2;
        public MyDirectory profileOld;
        public MyDirectory citrixTemp;
        public MyDirectory profileUnity;
        public MyDirectory cookies;
        public MyDirectory citrix;
        public MyDirectory icaClient;
        public MyDirectory sun;
        public MyDirectory microsoft;
        public MyDirectory appData;
        public MyDirectory systemProfile;
        public MyDirectory users;
        public MyDirectory profiles;

        public class MyDirectory
        {
            public string directoryname;

            public MyDirectory(string path)
            {
                directoryname = path;
            }
            
            public void delete()
            {
                // delete code here
            }

            public void rename()
            {
                // rename code here
            }
        }
    }



现在您可以使用 路径 .profile.delete() 在您的主要方法中(如图所示)。

一些注意事项:
  • 班级 我的目录 在您的班级内宣布 小路 。您不能直接使用它。如果您愿意,也可以将其从 小路 类,并使其成为类似于path类的类。
  • 该类具有非默认构造函数,因此您可以设置 目录名 实例化它时(请参阅 buildPaths )。

关于main方法中的前两行;你可以快乐地使用路径 路径 = buildPaths(...);实际上最好这样做,因为您的方法首先实例化一个对象(占用内存),然后调用 buildPaths 也实例化(因此再次占用内存)。最终,垃圾回收器可能会来释放未使用的内存(第一个实例),但是我不会依赖于此(我需要大量的C程序员来自己释放内存)。
 

豹拳

成员
已加入
2014年11月25日
留言内容
14
编程经验
Beginner
Wim,我看到了您在这里所做的事情,而这正是我所想知道的...如何使方法对属性进行更改  :) ,我现在明白了。

好的两件事。...我没有在我的rename()方法上显示任何错误..所以您将不得不进行详细说明。

和数字2。...您认为我在执行ppath.profile.delete()时遇到问题,但这只是我的好奇心。属性...。这是我以前可以做的,因为您可以看到我在哪里构建buildpaths方法。我什至在那儿尝试,它不再工作了。我想当我从路径更改为ppath时,我在VS中弄乱了一些东西,将其链接为对象或其他东西,我不知道...我可能必须在新项目中全部重写它们。

无论如何,我对您的帮助非常满意,您有一种使用示例的方式,这种方式可以使我的旧思维掌握诸如VS默认使用的关键字之类的小东西的目的。建立在班上的班绝对为我打开了可能性  :) .

所有这些对我来说都是真正的学术研究,我确信编写的程序会列出所有需要使用的路径,但是我一直在尝试寻找是否可以找到一种更好的方法来挑战自己。
 

狂暴风暴

知名会员
已加入
2014年8月6日
留言内容
85
地点
南非鲁德普特
编程经验
10+
        public bool reName(string path)
        {
            Directory.SetCurrentDirectory(path.profiles);
            if (Directory.Exists(path.profileOld))
            {
                Directory.Delete(path.profileOld);
            }
            Directory.Move(path.profile, path.profileOld);
            return true;
        }


该代码无法编译  ;) 您应该在例如 小路 .profiles。原因是您将字符串(路径)传递给该方法。该字符串没有诸如profile,profileOld等属性;你的班 路径 但是具有这些属性。
 
最佳 底部