1

我可以在程序重新启动时写入文件(因为它始终是第一次写入尝试)但是在相同的执行过程中它只在第一次工作然后它抛出一个异常说明进程无法访问文件,因为它正在被另一个进程使用

//1
StreamWriter streamWriter = new StreamWriter(attachment, false);
streamWriter.Write(query);
streamWriter.Dispose();
//2
TextWriter textWrtier = File.CreateText(attachment);
textWrtier.WriteLine(query);
textWrtier.Dispose();

我尝试将这两种类型的代码写入文件。我也用using语句尝试了上述代码,但它没有用。

写入文件后,我将其附加到邮件中(使用 smtp 客户端发送邮件)

var mail = new MailMessage(sender.Trim(), sender.Trim());
mail.Attachments.Add(new Attachment(attachment));
mail.Body = body;
client.Send(mail);
client.Dispose();

邮件部分工作正常。

4

6 回答 6

3

使用此方法:

           private bool WriteToDisk(string content, string filePath)
            {
                using (FileStream sw = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
                {
                    byte[] infos = Encoding.UTF8.GetBytes(content);
                    sw.Write(infos, 0, infos.Length);
                }

                return true;
            }

注意:如果您的文件不存在,请使用以下命令创建:

            private static void CreateFileIfNotExist(string filePath)
            {
                if (!File.Exists(filePath))
                {
                    var folderPath = Path.GetDirectoryName(filePath);
                    if (!Directory.Exists(folderPath))
                    {
                        Directory.CreateDirectory(folderPath);
                    }
                    File.Create(filePath).Dispose();
                }
于 2019-12-26T11:39:31.430 回答
2

试试这个解决方案,它可能会有所帮助

using (StreamWriter stream = new StreamWriter(attachment, false))
        {
            stream.WriteLine("some text here");
        }
于 2019-12-26T11:19:16.660 回答
1

问题出在 MailMessage 实例上,它使文件保持打开状态。处理邮件消息传递实例对我有用。

mail.Dispose();
于 2019-12-26T11:23:16.663 回答
1
string directory = Application.StartupPath + @"\Data Base";//create this folder
string fileName = "write here file name" + ".dat";//you can change type of file like .txt
string memoryPath = Path.Combine(directory, fileName);
using (StreamWriter sw = File.CreateText(memoryPath))
{
     sw.WriteLine("write here what you want");
}
于 2019-12-26T11:26:42.020 回答
1

试试这个

 using (StreamWriter str = new StreamWriter(attachment, false))
            {
                str.WriteLine("Heyy!! How are you");
            }
于 2019-12-26T13:39:16.313 回答
0

为避免锁定问题,您可以使用对象或 ReaderWriter 之类的锁定:此外,您可以使用 File.AppendAllText 或 AppendAllLines 来代替 FileStream 和 StreamWriter。

public static var lock = new ReaderWriterLock();
    public static void WriteToFile(string text)
    {
        try
        {
            string fileName = "";
            lock.AcquireWriterLock(int.MaxValue); 

            File.AppendAllLines(fileName);
        }
        finally
        {
            lock.ReleaseWriterLock();

        }
    }
于 2019-12-26T11:36:17.980 回答