Tôi có hàm Azure (HttpTrigger) tạo tệp tar.gz trong bộ lưu trữ Azure của tôi.
Khi tôi kích hoạt nó một lần, tệp sẽ được tạo thành công. Nhưng nếu tôi nhấp vào nó lần nữa thì tôi gặp lỗi:
[Thông tin] Quá trình này không thể truy cập tệp 'D:\local\Temp\myDir\tarArchive.tar.gz' vì nó đang được sử dụng bởi một quy trình khác.
Tôi phải khởi động lại chức năng trong cổng Azure để tạo một tệp khác.
Đây là mã của tôi:
FileStream fs = FileStream mới(myDir+"/firstFile", FileMode.Create);
fs.Write(bytesToCompress, 0, bytesToCompress.Length);
fs.Dispose();
FileStream sfs = FileStream mới(myDir + "/secondfile", FileMode.Create);
sfs.Dispose();
DirectoryInfo DirectoryOfFilesToBeTarred = new DirectoryInfo(myDir);
FileInfo[] filesInDirectory = DirectoryOfFilesToBeTarred.GetFiles();
chuỗi tarArchiveName = myDir + "/tarArchive.tar.gz";
sử dụng (Stream targetStream = new GZipOutputStream(File.Create(tarArchiveName)))
{
sử dụng (TarArchive tarArchive = TarArchive.CreateOutputTarArchive(targetStream, TarBuffer.DefaultBlockFactor))
{
foreach(FileInfo fileToBeTarred trong filesInDirectory)
{
log.Info(fileToBeTarred.FullName);
Mục nhập TarEntry = TarEntry.CreateEntryFromFile(fileToBeTarred.FullName);
tarArchive.WriteEntry(entry, true); // Lỗi được đưa ra ở đây
}
}
}
Tôi nghĩ fileToBeTarred vẫn đang được sử dụng khi gọi lại hàm (tôi có nhầm không?) nhưng tôi đã thử tạo một luồng từ FileInfo này để Dispose() nó, nhưng điều đó không giải quyết được vấn đề của tôi. Tôi cũng đã thử Xóa() nhưng không có tác dụng gì.
Có ai nhìn thấy điều gì đó mà tôi không thấy không?
谢谢你的帮助
gia hạn
Đây là mã đã sửa do Wim Coenen đưa ra
sử dụng (Stream fileStream = File.Create(tarArchiveName))
sử dụng (Stream targetStream = new GZipOutputStream(fileStream))
sử dụng (TarArchive tarArchive = TarArchive.CreateOutputTarArchive(targetStream, TarBuffer.DefaultBlockFactor))
{
foreach (FileInfo fileToBeTarred trong filesInDirectory)
{
log.Info(fileToBeTarred.FullName);
Mục nhập TarEntry = TarEntry.CreateEntryFromFile(fileToBeTarred.FullName);
tarArchive.WriteEntry(entry, true); // Lỗi được đưa ra ở đây
}
}
Và nhật ký lỗi (e = Đối tượng ngoại lệ) e.message =>
2018-08-01T11:59:46.887 [Thông tin] Quá trình không thể truy cập tệp 'D:\local\Temp\myDir\tarArchive.tar.gz' vì nó đang được sử dụng bởi một quy trình khác.
e.ToString() =>
2018-08-01T11:59:47.152 [Thông tin] System.IO.IOException: Quá trình này không thể truy cập tệp 'D:\local\Temp\myDir\tarArchive.tar.gz' vì nó đang được sử dụng bởi một quy trình khác.
tại System.IO.__Error.WinIOError(Int32 errorCode, String mightFullPath)
tại System.IO.FileStream.Init(đường dẫn chuỗi, chế độ FileMode, quyền truy cập FileAccess, quyền Int32, quyền sử dụng Boolean, chia sẻ FileShare, bộ đệm Int32Size, tùy chọn FileOptions, SECURITY_ATTRIBUTES secAttrs, chuỗi msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
tại System.IO.FileStream..ctor (Đường dẫn chuỗi, chế độ FileMode, quyền truy cập FileAccess, chia sẻ FileShare)
tại ICSharpCode.SharpZipLib.Tar.TarArchive.WriteEntryCore(TarEntry sourceEntry, Boolean recurse)
tại ICSharpCode.SharpZipLib.Tar.TarArchive.WriteEntry(TarEntry sourceEntry, Boolean recurse)
tại UploadFileFromBCText.Function1.d__4.MoveNext()
Tôi là một lập trình viên xuất sắc, rất giỏi!