c#将文件写入S3,然后删除本地文件
下面的程序从web服务提取数据并将其写入csv,将文件上载到S3,然后将其删除。我遇到的问题是,它无法删除该文件,因为它显示“System.IO.IOException:”进程无法访问文件“file.csv”,因为它正被另一个进程使用。“,我猜它尚未完成对S3的写入,因为它没有显示在那里。有什么建议吗 在这里,我关闭文件,上传到S3,然后尝试删除c#将文件写入S3,然后删除本地文件,c#,amazon-s3,delete-file,C#,Amazon S3,Delete File,下面的程序从web服务提取数据并将其写入csv,将文件上载到S3,然后将其删除。我遇到的问题是,它无法删除该文件,因为它显示“System.IO.IOException:”进程无法访问文件“file.csv”,因为它正被另一个进程使用。“,我猜它尚未完成对S3的写入,因为它没有显示在那里。有什么建议吗 在这里,我关闭文件,上传到S3,然后尝试删除 outputFile.Flush(); outputFile.Close(); AmazonS3Uploader awsfu = new Amazon
outputFile.Flush();
outputFile.Close();
AmazonS3Uploader awsfu = new AmazonS3Uploader();
awsfu.UploadFile(outputfilePath, "api-end-point", filenameaws);
System.IO.File.Delete(@outputfilePath);
下面是S3上传的代码
class AmazonS3Uploader
{
public void UploadFile(string filePath, string bucketName, string keyName)
{
var client1 = new AmazonS3Client(Amazon.RegionEndpoint.USEast2);
Console.WriteLine("s3 writing");
try
{
PutObjectRequest Request = new PutObjectRequest
{
BucketName = bucketName,
Key = keyName,
FilePath = filePath,
};
client1.PutObjectAsync(Request);
}
catch (AmazonS3Exception amazonS3Exception)
{
if (amazonS3Exception.ErrorCode != null &&
(amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId")
||
amazonS3Exception.ErrorCode.Equals("InvalidSecurity")))
{
throw new Exception("Check the provided AWS Credentials.");
}
else
{
throw new Exception("Error occurred: " + amazonS3Exception.Message);
}
}
//System.IO.File.Delete(@filePath); edit
}
}
您正在调用一个异步方法,而不是等待它完成 正如政府所说: [PutObjectAsync]启动PutObject操作的异步执行 因为您没有等待该方法完成,所以代码将继续并在文件仍在上载时尝试删除该文件(两次!) 解决此问题的最简单方法是更改代码以使用:
假设
PutObjectAsync
是异步的,您调用的是异步方法,而不是等待它完成。您还尝试删除文件两次,一次是在UploadFile
方法的末尾,然后在它返回后再次删除。我在示例代码中执行了两次,因为我一直在围绕语句尝试修复它。如果我理解异步方法,即使程序没有完成任务,它们也允许程序继续运行,对吗?因此,如果它不是异步的,它可能会减慢代码的速度,对吗?--也许我需要为这一个启动一个新线程,但是我的S3存储桶中没有显示任何内容,有什么想法吗?没关系,对象显示在S3中。感谢您的帮助,如果您能对异步方法和性能做一些澄清,我们将不胜感激。
client1.PutObject(Request);