IO 文件无法访问正在使用的文件

本文关键字:文件 访问 IO | 更新日期: 2023-09-27 18:34:28

嗨,伙计们,我正忙着编写一个小型控制台应用程序,该应用程序将拾取文本文件并邮寄它们,但是在邮寄它们之后,邮寄的文本文件必须移动到备份文件夹文件...问题是我在尝试删除文件时收到此错误,但我知道该文件未被我使用。

进程无法访问文件"C:''Files''Configs''Errorlog.txt,因为它正被另一个进程使用。

我使用了两种方法 file.move 和 file.copy,然后尝试删除它仍然不起作用,我得到同样的错误请协助

class Program
{
    static void Main(string[] args)
    {
        {
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("******");
            mail.From = new MailAddress("*********");
            mail.To.Add(ConfigurationSettings.AppSettings["EmailReceiver"]);
            mail.Subject = "Test HHjhihH- Mail";
            mail.Body = "TestMail";
            string folder = ConfigurationSettings.AppSettings["ConfigPath"];
            try
            {
                string[] txtfiles = Directory.GetFiles(folder, "*.txt");
                foreach (var txtfile in txtfiles)  //FileInfo file in Files )
                {
                    if (!File.Exists("ConfigPath"))//txtfile.Length != 0)
                    {
                        mail.Attachments.Add(new System.Net.Mail.Attachment(txtfile));
                        Console.WriteLine("sending Config File....");
                    }
                    else
                    {
                        Console.WriteLine("No files in the directory");
                        return;
                    }
                }
            }
            catch (Exception)
            {
                Console.WriteLine("Incorrect Path" + ConfigurationSettings.AppSettings["ConfigPath"] + ",does not exist");
                return;
            }
            SmtpServer.Port = ****;
            SmtpServer.Send(mail);
            Console.WriteLine("Message Sent");
        }
        {

            string fileName = string.Empty;
            fileName = "Errorlog.txt";
            string sourceFile = @"C:'Files'Configs'" + fileName;
            string destinationFile = @"C:'Files'BackupConfigs'" + fileName;
            // To move a file or folder to a new location:
            **//error PROBLEM OCCRURS HERE**
            File.Copy(sourceFile, destinationFile);
       // copies the file but wont delete original file
            File.Delete(@"C:'Files'Configs'Errorlog.txt");
        // when i use File.move(sourceFile, destinationFile); i get same error

        }}

IO 文件无法访问正在使用的文件

您需要将new System.Net.Mail.Attachment(txtfile)的结果分配给变量。

var attachment = new System.Net.Mail.Attachment(txtfile);

发送邮件后,必须处理附件:

attachment.Dispose();

它使文件保持打开状态。

我认为每次尝试使用文件访问时都必须使用使用子句。如果不这样做,则在运行应用程序一次后,该文件将在后台使用!

我想Directory.GetFiles(folder, "*.txt")提供了纯文件名。因此,要么采用绝对文件名,要么确保文件位于执行目录中(调试、发布等(。

        SmtpServer.Port = ****;
        SmtpServer.Send(mail); 
        Mail.Dispose();
        Console.WriteLine("Message Sent");

发送邮件后,我使用了Mail.dispose((,它解决了我可以在发送后删除文件的问题。感谢您的投入