我正在尝试查找文件的大小并将其存储在string fileSize = string.Empty;
中。
为此,我使用唯一的名称保存文件,然后阅读最终删除的文件。
有时我在读取或删除文件时遇到错误。
阅读时出现此错误
该进程无法访问文件“文件名”,因为它正在被另一个进程使用。 在System.IO .__ Error.WinIOError(Int32 errorCode,可能是StringFullPath) 在System.IO.FileStream.Init(字符串路径,FileMode模式,FileAccess访问,Int32权限,布尔useRights,FileShare共享,Int32 bufferSize,FileOptions选项,SECURITY_ATTRIBUTES secAttrs,字符串msgPath,布尔bFromProxy,布尔useLongPath,布尔checkHost) 在System.IO.FileStream..ctor(字符串路径,FileMode模式,FileAccess访问,FileShare共享)
在删除时出现此错误
拒绝访问路径“文件名”。 在System.IO .__ Error.WinIOError(Int32 errorCode,可能是StringFullPath) 在System.IO.File.InternalDelete(字符串路径,布尔值CheckHost)
我的代码是:
bool checksize(Outlook.Attachment attachment)
{
string currentTime = DateTime.Now.ToString("HHmmssff");
if (!Directory.Exists(GetConfigSettings("folderPath")))
{
Directory.CreateDirectory(GetConfigSettings("folderPath"));
}
attachment.SaveAsFile(GetConfigSettings("folderPath") + "\\"+ currentTime + "_" + attachment.FileName);
using (BinaryReader br = new BinaryReader(File.Open(GetConfigSettings("folderPath") + "\\"+ currentTime + "_" + attachment.FileName), FileMode.Open)))
{
fileSize = br.BaseStream.Length.ToString();
}
File.Delete(GetConfigSettings("folderPath") + "\\"+ currentTime + "_" + attachment.FileName));
//somecode
}
我不明白为什么它会随机抛出异常。
答案 0 :(得分:2)
不是将附件保存到临时文件,而是使用不相关的阅读器打开该文件,然后检查阅读器的基本流长度,然后使用Outlook.Attachment.Size
再次删除该文件。
您可以用以下方法替换整个方法:
bool checksize(Outlook.Attachment attachment)
{
filesize = attachment.Size.ToString();
return true;
}
此外,签名bool checksize
毫无意义,也没有将文件大小存储在类成员中,也没有将其存储为字符串,但这不是您的问题。
答案 1 :(得分:0)
通过在保存和读取之间添加等待,解决了我的问题。
attachment.SaveAsFile(GetConfigSettings("folderPath") + "\\"+ currentTime + "_" + attachment.FileName);
System.Threading.Thread.Sleep(100);
using (BinaryReader br = new BinaryReader(File.Open(GetConfigSettings("folderPath") + "\\"+ currentTime + "_" + attachment.FileName), FileMode.Open)))
{
fileSize = br.BaseStream.Length.ToString();
}