2015-05-29 36 views
2

我試圖在對源文件中的某些數據進行某些更改後,從一個文件寫入臨時文件。直到我將這個邏輯提取到它自己的函數中,這一直工作。StreamWriter不附加到文件,而是在不同的目錄中創建新文件

運行一些測試後,我注意到只有第一行被保存到我指定位置的文件中。調試完成後,我可以看到從第二次調用這個函數,然後文件位置處於完全不同的位置。

我有兩個問題,第一個 - 爲什麼會發生這種情況?第二 - 確保這個問題得到解決並且不會再發生的最好方法是什麼?

str []是按分隔符一行一次分割的文件。 文件名是包含在文件目錄中的特定文件的名稱(該程序通過多個文件循環)。

public static void writeFile(string[] str, string filename) 
{ 
    rowCount++; 
    using (StreamWriter sw = new StreamWriter(filename.Substring(0, filename.Length - 4) + "_tmp.txt", true, System.Text.Encoding.Unicode)) 
    { 
     string tempString = String.Empty; 
     for (int i = 0; i < str.Length; i++) 
     { 
      if (isMRT) 
      { 
       tempString += str[i] + ","; 
      } 
      else 
      { 
       tempString += str[i] + "|"; 
      } 
     } 
     logger.LogMessage("Writting line to file: " + "Row #: " + rowCount + " ,File Path: " + filename.Substring(0, filename.Length - 4) + "_tmp.txt"); 
     sw.WriteLine(tempString); 
    } 
} 

編輯: 這是我的目錄和文件的列表,並調用write方法的功能

static string directory = ConfigurationManager.AppSettings["Directory"]; 
static List<String> fileNames = Directory.GetFiles(directory).ToList(); 

private static void activityCheck(string filename, string[] allLines) 
     { 
      foreach (string nextLine in allLines.Skip(1)) 
      { 
       string[] tempLine; 
       if (isMRT) 
       { 
        tempLine = nextLine.Split(','); 
       } 
       else 
       { 
        tempLine = nextLine.Split('|'); 
       } 
       logger.LogMessage("Checking Activity flag..."); 
       if (tempLine[count].Length == 6) 
       { 
        checkColumn(tempLine); 
        logger.LogMessage("Activity flag is OK"); 
        writeFile(tempLine, filename); 
       } 
       else if (tempLine[count].Length > 6) 
       { 
        tempLine[count] = tempLine[count].Trim(); 
        checkColumn(tempLine); 
        logger.LogMessage("FIXED Activity flag"); 
        writeFile(tempLine, filename);      
       } 
       else 
       { 
        logger.LogMessage("The Activity flag did not have enough numbers in Row #: " +rowCount); 
        //throw new Exception("There are not enough numbers in the Activity flag"); 
       } 


    } 
     } 

EDIT2: 新發臨時文件被在Visual Studio文件夾中創建的項目的bin文件夾。不知道這對於以前可能遇到過這個問題的人是否有用。

+4

你能告訴我們writeFile的調用嗎? – Paddy

+1

什麼是'filename',文件的實際名稱是什麼? – Greg

+0

在呼叫發生時添加了功能@Paddy –

回答

0

我找到了解決我的問題的方法。我原本只是傳遞文件的名稱而不是整個路徑。當然,我錯過了一個函數調用,我仍然在傳遞文件的名稱,而不是在項目目錄中創建臨時文件的路徑。

是一個快速修復發現它後:

activityCheck(nameOfFile, allLines); 

activityCheck(pathToFile, allLines); 

如果有人發現在工程/斌/調試位置被創建的文件,你知道你正確設置目標目錄,仔細檢查你是否傳遞了實際路徑。

相關問題