将路径追加到字符串

时间:2016-06-29 02:13:42

标签: c# asp.net string for-loop

我需要帮助将字符串附加到路径。这里的问题是我声明的路径不能被调用,而只是给出正常的字符串值。这是我的代码。

public static string inputhistory1 = System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) + "\\Log\\" + Process.GetCurrentProcess().ProcessName + DateTime.Now.ToString("yyyyMMdd")+".chf";
public static string inputhistory2 = System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) + "\\Log\\FileExtact" + DateTime.Now.AddMonths(-1).ToString("yyyyMM") + ".chf";
public static string inputhistory3 = System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) + "\\Log\\FileExtact" + DateTime.Now.AddMonths(-2).ToString("yyyyMM") + ".chf";
public static string inputhistory4 = System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) + "\\Log\\FileExtact" + DateTime.Now.AddMonths(-3).ToString("yyyyMM") + ".chf";

public static bool checkfile(string filename)
{
    bool same = false;

    for (i = 1; i <= 4; i++)
    {
        string filechf = "inputhistory" + i;
        filechf = filechf;

        try
        {
            foreach (string line in System.IO.File.ReadAllLines(filechf))
            {
                if (line.Contains(filename))
                {
                    same = true;
                    break;
                }
                else
                {
                    same = false;
                }

                }
            }

        catch (Exception)
        {
            // Ignore if file does not exist.
        }

        if (same == true)
        {
            break;
        }
    }
}

3 个答案:

答案 0 :(得分:1)

这是因为您使用字符串filechf指定变量"inputhistory" + i。 使用数组或列表存储输入历史记录值。

public static string inputhistory1 = System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) + "\\Log\\" + Process.GetCurrentProcess().ProcessName + DateTime.Now.ToString("yyyyMMdd")+".chf";
public static string inputhistory2 = System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) + "\\Log\\FileExtact" + DateTime.Now.AddMonths(-1).ToString("yyyyMM") + ".chf";
public static string inputhistory3 = System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) + "\\Log\\FileExtact" + DateTime.Now.AddMonths(-2).ToString("yyyyMM") + ".chf";
public static string inputhistory4 = System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) + "\\Log\\FileExtact" + DateTime.Now.AddMonths(-3).ToString("yyyyMM") + ".chf";

List<string> inputHistories = new List<string>();
inputHistories.Add(inputhistory1);
inputHistories.Add(inputhistory2);
inputHistories.Add(inputhistory3);
inputHistories.Add(inputhistory4);

然后您可以通过索引访问其值:

public static bool checkfile(string filename)
    {
        bool same = false;
        //try
        //{
        for (i = 0; i < inputHistories.Count; i++)
        {
            string filechf = inputHistories[i];
            try
            {
                foreach (string line in System.IO.File.ReadAllLines(filechf))
                {

                    if (line.Contains(filename))
                    {
                        same = true;
                        break;
                    }
                    else
                    {
                        same = false;
                    }

                }
            }
            catch (Exception)
            {
              //ignore if file does not exist
            }
            if (same == true)
            {
                break;
            }
        }

答案 1 :(得分:1)

只是为了展示LINQ的表现力,以及利用现有工具的力量:

List<string> inputHistories = new List<string>
{
    inputhistory1, inputhistory2, inputhistory3, inputhistory4
};

public static bool checkfile(string filename)
{
    return inputHistories.Any(filename =>
        File.ReadLines(filename).Any(line => line.Contains(filename)));
}

答案 2 :(得分:0)

有多种解决方案可能符合您的要求

  1. 您可以将变量存储在字典中:

    var dictionary = new Dictionary<string,string>();
    dictionary.Add("inputhistory1", inputhistory1);
    dictionary.Add("inputhistory2", inputhistory2);
    dictionary.Add("inputhistory3", inputhistory3);
    dictionary.Add("inputhistory4", inputhistory4);
    //use as below
    Console.WriteLine(dictionary["inputhistory1"]);
    
  2. 或者您可以使用反射,以获取更多信息MSDN

    public class TestClass
    {
        public static string inputhistory1 = "value1";
        public static string inputhistory2 = "value2";
        public static string inputhistory3 = "value3";
        public static string inputhistory4 = "value4";
    }        
    var obj = new TestClass();
    var field = typeof (TestClass).GetField("inputhistory1");
    //use as below
    Console.WriteLine(field.GetValue(obj));
    
  3. 即使你可以使用switch / case来返回你的变量值