c#文件复制丢失的文件扩展名

时间:2013-12-04 13:40:48

标签: c# copy

编辑:

由于这是一个糟糕的描述,因此这是一个更好的选择:

我正在复制SQL Server ERROR日志(不是数据库日志),这里是代码:

//Get Directory
DirectoryInfo dir = new DirectoryInfo("C:\Program Files\Microsoft SQL Server\MSSQL10.ARC514A\MSSQL\Log");

//Get filenames in Directory
FileInfo[] fis = dir.GetFiles("*", SearchOption.AllDirectories);

//Loop over each file name
foreach (FileInfo fi in fis)
{
//Get files that are +/- two days of the issue
if (fi.LastWriteTime.Date > date.Date.AddDays(-2) && fi.LastWriteTime.Date < date.Date.AddDays(2))
{
File.Copy(fi.FullName, "C:\SQL_LOGS\", true);
}
}

复制文件时产生的错误是:

  

“无法找到路径'C:\ Program Files \ Microsoft SQL的一部分   服务器\ MSSQL10.ARC514A \ MSSQL \ LOG \ ERRORLOG'“

看起来这是因为副本试图将无扩展名文件复制为文件夹,是否有办法将文件从一个位置复制到另一个位置而没有该文件具有扩展名...它绝对没有延期! :)

3 个答案:

答案 0 :(得分:3)

您忘记将文件名附加到目录的末尾。

//Loop over each file name
foreach (FileInfo fi in fis)
{
    //Get files that are +/- two days of the issue
    if (fi.LastWriteTime.Date > date.Date.AddDays(-2) && fi.LastWriteTime.Date < date.Date.AddDays(2))
    {
        fi.CopyTo("C:\SQL_LOGS\" + fi.Name, overwrite: true);
    }
}

那应该适合你。

答案 1 :(得分:2)

假设这些是SQL Server数据库日志文件,它们是.LDF扩展名。

尝试(更改路径分隔符):

File.Copy(@"C:\Folder1\SQLLOG.LDF", @"C:\Folder2\SQLLOG.LDF", true);

或者检查文件属性以查找扩展名并添加它。

答案 2 :(得分:1)

您可以使用FileInfo.CopyTo代替。

//Loop over each file name
foreach (FileInfo fi in fis)
{
    //Get files that are +/- two days of the issue
    if (fi.LastWriteTime.Date > date.Date.AddDays(-2) && fi.LastWriteTime.Date < date.Date.AddDays(2))
    {
        fi.CopyTo("C:\SQL_LOGS\", overwrite: true);
    }
}