我在使用 filestream 将字节附加到文件时遇到问题。我有一个客户端应用程序,它拆分文件字节并将其发送到 web 服务 n 次而不是单次发送。
我的网络服务代码如下。
public bool TransferFile(byte[] bytes, ref string token, ref string path, string extension)
{
string folderPath = string.Empty;
if (System.Configuration.ConfigurationManager.AppSettings["DepositPath"] != null)
{
folderPath = System.Configuration.ConfigurationManager.AppSettings["DepositPath"].ToString();
}
if (string.IsNullOrEmpty(token))
{
token = Guid.NewGuid().ToString();
}
path = Path.Combine(folderPath, token + extension);
if (!File.Exists(path))
{
using (FileStream fs = File.Create(path)){
fs.Dispose();
}
}
using (FileStream stream = new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.Write))
{
stream.Write(bytes, 0, bytes.Length);
stream.Flush();
stream.Close();
stream.Dispose();
}
return true;
}
我已经以附加模式打开文件并附加字节并关闭流。即使我得到了 IOException ,它说文件正在被其他进程使用。我也配置了应用程序池标识。请给我一些解决此问题的想法。
System.Web.Services.Protocols.SoapException:服务器无法处理请求。---> System.IO.IOException:该进程无法访问文件“D:\Development Projects\IAM\FileTransporter\DepositFolder\79ede99d-d76a-4050-959d-17bb87fa6fdb.exe”,因为它正被另一个进程使用。 在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs , String msgPath, Boolean bFromProxy) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) at FileTransporterService.Service.TransferFile(Byte[] bytes, String& token, String& path, String extension)在 D:\Development Projects\IAM\FileTransporter\FileTransporterService\Service.asmx.cs:line 36 --- 内部异常堆栈跟踪结束 ---