2

我做了一些研究,但我找不到我的问题的答案。

我有这个代码来搜索一个词并替换它。

关键是,在我的应用程序中,我想选择一些文件和文件夹路径,然后将该路径写入我的 .properties 文件,以便“值”始终在变化。

在我的.properties文件中db.host=localhost,我想将其更改为用户选择的主机名,例如db.host=myhost. 这是我的代码:

 string originalFile = @"C:\wamp\bin\php\php5.4.3\build.properties";
        string outputFile = @"C:\wamp\bin\php\php5.4.3\build1.properties";
        string searchTerm = "db.host=";
        string replaceTerm="db.host=" + tbhost.Text ;

        string tempLineValue;
        using (FileStream inputStream = File.OpenRead(originalFile))
        {
            using (StreamReader inputReader = new StreamReader(inputStream))
            {
                using (StreamWriter outputWriter = File.AppendText(outputFile))
                {
                    while (null != (tempLineValue = inputReader.ReadLine()))
                    {
                        outputWriter.WriteLine(tempLineValue.Replace(searchTerm, replaceTerm));
                    }
                }
            }
        }

所以现在如果我在我的文件中搜索db.host=并更改它"db.host=" + tbhost.Text的结果是db.host=myhostoldhost假设我tbhost.Text=myhost的和最旧的值是“oldhost”。所以我需要的是找到db.host=删除所有行,然后在该行中写入。

4

2 回答 2

1

在写入文件之前使用以下代码

Regex r = new Regex(@"\s");
String[] tokens = r.Split(tempLineValue);
string settings = string.Empty;
for (int i = 0; i < tokens.Length; i++)
{
   if (tokens[i].Contains(searchTerm))
   {
       settings = tokens[i];
       break;
   }
}
if (settings != string.Empty)
    outputWriter.WriteLine((tempLineValue.Replace(settings, replaceTerm));
else
    outputWriter.WriteLine(tempLineValue);

假设:你的主人只有一个词。

于 2013-09-19T17:33:42.543 回答
0

usercr 我有这样的代码:

using (FileStream inputStream = File.OpenRead(originalFile))
        {
            using (StreamReader inputReader = new StreamReader(inputStream))
            {
                using (StreamWriter outputWriter = File.AppendText(outputFile))
                {
                    while (null != (tempLineValue = inputReader.ReadLine()))
                    {

                                                    Regex r = new Regex(@"\s");
                        String[] tokens = r.Split(tempLineValue);
                        string settings = string.Empty;
                        for (int i = 0; i < tokens.Length; i++)
                        {
                           if (tokens[i].Contains(searchTerm))
                           {
                               settings = tokens[i];
                               break;
                           }
                        }
                        outputWriter.WriteLine((tempLineValue.Replace(settings, replaceTerm)));
                    }
                }
            }
        }

而且我有异常“字符串不能为零长度。参数名称:oldvalue”

于 2013-09-19T17:43:57.003 回答