2013-12-22 64 views
-1

我試圖使用輸出(「行」)作爲新的文件名(文件已存在,只是重命名)。 例如「A,tampqer,n:.jpg」 但它看起來像: =「A \ tampqer \ tn:\ t \ t」使用輸出(StreamReader)行作爲文件名(重命名)

我得到一個錯誤:非法字符的文件名。

  int counter = 0; 

     string line; 

     // Read the file and display it line by line. 


     StreamReader file = new StreamReader(@"C:\\german-czech.txt"); 
     while ((line = file.ReadLine()) != null) 
     { 
      //replace /t doesnt work 
      for (int i = 0; i < line.Length; i++) 
      { 
       if (line[i] == '\t') 
       { 
        line.Replace(line[i], ','); 
       } 
      } 

      //Console.WriteLine(string.Format(line, @"\\t").ToString()); 
      Console.WriteLine(line); 
      counter++; 

      if (counter == 100) 
       break; 

     } 
     file.Close(); 

並猜測「行」的內容仍然是一樣的......任何人都可以幫助我解決這個小問題嗎? 我還試過了什麼? line.Replace(System.Environment.NewLine,「,」); 的String.Empty ... 「\ n」 問候

+0

如果有任何的' A,tampqer,n:.jpg或A \ tampqer \ tn:\ t \ t是文件名,您應該知道冒號':'是Windows上文件名的非法字符。此外,儘管我相信'@「C:\\ german-czech.txt」'可以工作,但您可能想使用'@「C:\ german-czech.txt」'或'「C:\\ german- czech.txt「'。 – mrzli

回答

0

你需要

line = line.Replace(line[i], ','); 

它不到位更改。它返回一個新的字符串。

您也不需要逐個橫過字符串。 Replace將替換字符串中的每一處。因此,而不是你的:

//replace /t doesnt work 
    for (int i = 0; i < line.Length; i++) 
    { 
     if (line[i] == '\t') 
     { 
      line.Replace(line[i], ','); 
     } 
    } 

只是有:

line = line.Replace("\t", ','); 

(。這是可以矯正你的代碼,但我認爲mrzli在他的評論中得到了真正的錯誤)

+0

「不支持給定路徑的格式。」對於該語句「File.Move(f.FullName,Path.Combine(f.DirectoryName,line.ToString()+ f.Extension));」 - 但只有當我使用「line.toString()」與其他名稱的作品。「線」現在看起來像「A,ampqer,n:,,」... – user3128022

+0

好吧,你們都是對的。我用「:」代替了。非常感謝 :) – user3128022