我真的很挣扎,任何帮助都会非常感激。
我需要一些代码来遍历文件夹中的每个文件并将其保存到数据库中,以便以后可以将其拉出并显示出来。我还没有看到显示部分大声笑,仍然试图获取数据库中的文件。
到目前为止,我给了我一个错误
Value of type '1-dimensional array of Byte' cannot be converted to 'String'.
数据库中的所有字段均为nvarchar(MAX)
Dim dir As New System.IO.DirectoryInfo("C:\Users\Will\Desktop\SUBARU")
For Each f As System.IO.FileInfo In dir.GetFiles("*.*")
Using db As New FileStoreAppDBEntities
Dim NewFile As New StoredFile
NewFile.FileName = f.Name
NewFile.FileSize = f.Length
'got trouble here
Dim ImageData As Byte() = System.IO.File.ReadAllBytes(f.FullName)
NewFile.FileContent = ImageData
'
NewFile.FileType = f.Extension
db.StoredFiles.AddObject(NewFile)
db.SaveChanges()
End Using
Next
也许我这样做错了?
非常感谢你的帮助。
- 编辑
这似乎就是这样做的!
For Each f As System.IO.FileInfo In dir.GetFiles("*.*")
Using db As New FileStoreAppDBEntities
Dim NewFile As New StoredFile
NewFile.FileName = f.Name
NewFile.FileSize = f.Length
Dim filename As String = f.FullName
NewFile.FileContent = System.IO.File.ReadAllBytes(filename)
NewFile.FileType = f.Extension.ToLower
db.StoredFiles.AddObject(NewFile)
db.SaveChanges()
End Using
Next
虽然不确定性能,但我认为这可能会将文件放入内存然后发送而不是流式传输?
并检索文件:
Using db As New FileStoreAppDBEntities
Dim IDofFile As Integer = 31
Dim getFile = (From files In db.StoredFiles Where files.FileID = IDofFile Select files).SingleOrDefault
'getFile.FileName eg. mydocument.txt
System.IO.File.WriteAllBytes("C:\LocationToSaveTo\" & getFile.FileName, getFile.FileContent)
End Using
为非常大的文件System.OutOfMemoryException
收到错误
尽管可以完美地处理较小的文件......
也许可以对文件进行分块?
答案 0 :(得分:0)
你的文件是文本文件吗?如果是这样,您不应将它们作为二进制数据而是作为文本数据读取。像这样的东西(抱歉它是C#,但它很容易转换为VB.NET):
using(StreamReader textFile = new StreamReader(path))
{
NewFile.FileContent = textFile.ReadToEnd();
}
如果文件是二进制文件,那么您不希望将它们存储为数据库中的字符串,但可能是varbinary。
答案 1 :(得分:0)
这似乎就是这样做的!
For Each f As System.IO.FileInfo In dir.GetFiles("*.*")
Using db As New FileStoreAppDBEntities
Dim NewFile As New StoredFile
NewFile.FileName = f.Name
NewFile.FileSize = f.Length
Dim filename As String = f.FullName
NewFile.FileContent = System.IO.File.ReadAllBytes(filename)
NewFile.FileType = f.Extension.ToLower
db.StoredFiles.AddObject(NewFile)
db.SaveChanges()
End Using
Next
虽然不确定性能,但我认为这可能会将文件放入内存然后发送而不是流式传输?
并检索文件:
Using db As New FileStoreAppDBEntities
Dim IDofFile As Integer = 31
Dim getFile = (From files In db.StoredFiles Where files.FileID = IDofFile Select files).SingleOrDefault
'getFile.FileName eg. mydocument.txt
System.IO.File.WriteAllBytes("C:\LocationToSaveTo\" & getFile.FileName, getFile.FileContent)
End Using
为非常大的文件获取错误System.OutOfMemoryException完美适用于较小的文件...