C# SystemIO:进程无法访问文件X,因为它被另一个进程(同一进程)使用

C# SystemIO:进程无法访问文件X,因为它被另一个进程(同一进程)使用,c#,file,asynchronous,io,C#,File,Asynchronous,Io,我得到一个错误进程无法访问文件X,因为它被另一个进程使用,我非常确定它是同一个进程,因为我已经检查了所有其他打开的应用程序 这些是我使用此文件的时间 ... string jsonString; jsonString = JsonSerializer.Serialize(hardware); System.IO.File.WriteAllText(Directory.GetCurrentDirectory().ToString() + @"\HardwareInfo.json", jsonStr

我得到一个错误
进程无法访问文件X,因为它被另一个进程使用
,我非常确定它是同一个进程,因为我已经检查了所有其他打开的应用程序

这些是我使用此文件的时间

...
string jsonString;
jsonString = JsonSerializer.Serialize(hardware);
System.IO.File.WriteAllText(Directory.GetCurrentDirectory().ToString() + @"\HardwareInfo.json", jsonString);
// ^^ This is where I get the exception ^^
...
我不知道这是否重要,但在第二种方法中它是异步使用的

提前感谢。

无锁编辑:

     using (var memStream = new MemoryStream) 
     {
        using (var localStream = File.OpenRead(uploadFile))
        {
            localStream.CopyTo(memStream);
        }

        await client.UploadAsync(memStream, Path.GetFileName(uploadFile));
     }

什么类型的
客户端
?在我看来,当您调用
UploadAsync
var client=new SftpClient(主机、int.Parse(端口)、用户名、密码)时,您似乎正在尝试第二次读取该文件
这是一个SftpClient实例(SshNet)
无法在lock语句体中等待
我无法使
客户端.UploadAsync
异步。@WoJo edit:问题主要是因为您在文件句柄打开的情况下上载。@Mertuarez这可以工作,但是SFTP服务器上的文件是空的,我电脑上的那个不是空的,这不是防弹的。因此,请相信你的应用程序将开始消耗更多内存,并且在多次读写的情况下会发生冲突。好的选择是使用线程安全读写方法创建serviceclass。或
     using (var memStream = new MemoryStream) 
     {
        using (var localStream = File.OpenRead(uploadFile))
        {
            localStream.CopyTo(memStream);
        }

        await client.UploadAsync(memStream, Path.GetFileName(uploadFile));
     }