我試圖在對源文件中的某些數據進行某些更改後,從一個文件寫入臨時文件。直到我將這個邏輯提取到它自己的函數中,這一直工作。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文件夾。不知道這對於以前可能遇到過這個問題的人是否有用。
你能告訴我們writeFile的調用嗎? – Paddy
什麼是'filename',文件的實際名稱是什麼? – Greg
在呼叫發生時添加了功能@Paddy –