C#将复制的文件保存到文本文件

时间:2013-08-08 16:32:36

标签: c#

所以在我正在制作的程序中,我希望在复制文件时写入文本文件。 但是,我必须复制文件的代码是循环的。似乎当它写入文本文件的时候它只会在最后一个文件被复制时写入...不确定那里到底发生了什么,我希望我的描述有用。这是一些代码...

//search through the source to find the matching file
foreach (var srcfile in Directory.GetFiles(sourceDir))
{
//cut off the source file from the source path same with destination
strSrcFile = srcfile.Split(Path.DirectorySeparatorChar).Last();
strDstFile = dstfile.Split(Path.DirectorySeparatorChar).Last();

//check the files before the move 
CheckFiles(strSrcFile, strDstFile, srcfile, dstfile);

//if the destination and source files match up, replace the desination with the source
if (strSrcFile == strDstFile)
{
File.Copy(srcfile, dstfile, true);

//write to the text file 
TextWriter writer = new StreamWriter(GlobalVars.strLogPath);

writer.WriteLine("Date: " + DateTime.Today + " Source Path: " + srcfile +
                         " Destination Path: " + dstfile + " File Copied: " + strDstFile + "\n\n");
//close the writer
writer.Close();

实施例: 假设我有一个源文件夹X将内容复制到文件夹Y. 并说文件夹X中的文件是a.jpg,b.png,c.pdf

文本文件中发生了什么: 日期:8/8/2013 12:00:00 AM源路径:C:\ X \目标路径:C:\ Y \文件已复制:c.pdf

我想要发生什么: 日期:8/8/2013 12:00:00 AM源路径:C:\ X \目标路径:C:\ Y \文件已复制:a.jpg 日期:8/8/2013 12:00:00 AM源路径:C:\ X \目标路径:C:\ Y \文件已复制:b.png 日期:8/8/2013 12:00:00 AM源路径:C:\ X \目标路径:C:\ Y \文件已复制:c.pdf

2 个答案:

答案 0 :(得分:2)

你想要追加到文件而不是每次都像当前一样覆盖它;

new StreamWriter(GlobalVars.strLogPath, true); // bool append

你也可以更优雅; strSrcFile = Path.GetFileName(srcfile);

您可能还想考虑将文本填充到循环内的StringBuilder中,然后将其写出一次 循环之后。

答案 1 :(得分:0)

我看到你使用相同的文件为每个文件副本写日志。问题在于初始化StreamWriter

new StreamWriter(GlobalVars.strLogPath);

此构造函数会覆盖文件的内容(如果存在)。如果您只想附加文本,则必须使用以下构造函数。

public StreamWriter(
    string path,
    bool append
)

这里为append参数传递true。即。

TextWriter writer = new StreamWriter(GlobalVars.strLogPath,true);