我正在调试将一个对象的片段写入文件的一些问题,我已经找到了打开文件并在其中写入"TEST"的基本情况.我是这样做的:
static FileStream fs;
static BinaryWriter w;
fs = new FileStream(filename, FileMode.Create);
w = new BinaryWriter(fs);
w.Write("test");
w.Close();
fs.Close();
Run Code Online (Sandbox Code Playgroud)
不幸的是,这最终会在文件的前面添加一个框,它看起来像这样:
测试,前面有一个有趣的盒子.这是为什么,我该如何避免呢?
编辑:它似乎没有在这里显示框,但它是看起来像胡言乱语的unicode角色.
我想在HttpResponse中返回一些文件,我正在使用以下函数.返回的文件总是有1kb的文件大小,我不知道为什么.我可以打开文件,但似乎没有正确提供.因此,我想知道如何通过HttpResponse使用django/python返回文件.
@login_required
def serve_upload_files(request, file_url):
import os.path
import mimetypes
mimetypes.init()
try:
file_path = settings.UPLOAD_LOCATION + '/' + file_url
fsock = open(file_path,"r")
#file = fsock.read()
#fsock = open(file_path,"r").read()
file_name = os.path.basename(file_path)
file_size = os.path.getsize(file_path)
print "file size is: " + str(file_size)
mime_type_guess = mimetypes.guess_type(file_name)
if mime_type_guess is not None:
response = HttpResponse(fsock, mimetype=mime_type_guess[0])
response['Content-Disposition'] = 'attachment; filename=' + file_name
except IOError:
response = HttpResponseNotFound()
return response
Run Code Online (Sandbox Code Playgroud)
编辑:这个bug实际上不是一个bug ;-)
此解决方案正在Apache服务器上进行生产,因此源可以.
在写这个问题时,我用django开发服务器在本地测试它,并想知道为什么它不起作用.我的一个朋友告诉我,如果服务器中没有设置mime类型,可能会出现此问题.但他不确定这是不是问题.但有一件事是肯定的..它与服务器有关.
我有一个文件包含我想要监视更改的数据,以及添加我自己的更改.想像"Tail -f foo.txt".
基于这个线程,看起来我应该创建一个文件流,并将它传递给一个编写器和读者.但是,当读者到达原始文件的末尾时,它无法看到我自己写的更新.
我知道这似乎是一个奇怪的情况......它更多的是一个实验,看看它是否可以完成.
这是我尝试的示例案例:
foo.txt:
a
b
c
d
e
f
string test = "foo.txt";
System.IO.FileStream fs = new System.IO.FileStream(test, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite);
var sw = new System.IO.StreamWriter(fs);
var sr = new System.IO.StreamReader(fs);
var res = sr.ReadLine();
res = sr.ReadLine();
sw.WriteLine("g");
sw.Flush();
res = sr.ReadLine();
res = sr.ReadLine();
sw.WriteLine("h");
sw.Flush();
sw.WriteLine("i");
sw.Flush();
sw.WriteLine("j");
sw.Flush();
sw.WriteLine("k");
sw.Flush();
res = sr.ReadLine();
res = sr.ReadLine();
res = sr.ReadLine();
res = sr.ReadLine();
res = sr.ReadLine();
res = sr.ReadLine();
Run Code Online (Sandbox Code Playgroud)
过了"f"后,读者返回null.
我可以打开一个FileStream
new FileStream(logfileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
Run Code Online (Sandbox Code Playgroud)
没有锁定文件.
我可以这样做File.ReadLines(string path)吗?
我正在通过网络制作一个简单的文件传输发件人和接收器应用程序.到目前为止,我发送的是发送方将文件转换为字节数组,并将该数组的块发送给接收方.
这适用于最多的文件256mb,但是上面的任何内容:
byte[] buffer = StreamFile(fileName); //This is where I convert the file
Throws a System out of memory exception.
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来读取块中的文件然后写入该块而不是将整个文件加载到byte.我该怎么做FileStream?
编辑:
对不起,到目前为止,这是我糟糕的代码:
private void btnSend(object sender, EventArgs e)
{
Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
byte[] fileName = Encoding.UTF8.GetBytes(fName); //file name
byte[] fileData = null;
try
{
fileData = StreamFile(textBox1.Text); //file
}
catch (OutOfMemoryException ex)
{
MessageBox.Show("Out of memory");
return;
}
byte[] fileNameLen = BitConverter.GetBytes(fileName.Length); //length of file name
clientData = new …Run Code Online (Sandbox Code Playgroud) 我有一个WCF服务,用户可以从中请求大型数据文件(存储在启用了FileStream的SQL数据库中).这些文件应该流式传输,并且在发送之前不会加载到内存中.
所以我有以下方法应该返回一个由WCF服务调用的流,以便它可以将Stream返回给客户端.
public static Stream GetData(string tableName, string columnName, string primaryKeyName, Guid primaryKey)
{
string sqlQuery =
String.Format(
"SELECT {0}.PathName(), GET_FILESTREAM_TRANSACTION_CONTEXT() FROM {1} WHERE {2} = @primaryKey", columnName, tableName, primaryKeyName);
SqlFileStream stream;
using (TransactionScope transactionScope = new TransactionScope())
{
byte[] serverTransactionContext;
string serverPath;
using (SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ToString()))
{
sqlConnection.Open();
using (SqlCommand sqlCommand = new SqlCommand(sqlQuery, sqlConnection))
{
sqlCommand.Parameters.Add("@primaryKey", SqlDbType.UniqueIdentifier).Value = primaryKey;
using (SqlDataReader sqlDataReader = sqlCommand.ExecuteReader())
{
sqlDataReader.Read();
serverPath = sqlDataReader.GetSqlString(0).Value;
serverTransactionContext = sqlDataReader.GetSqlBinary(1).Value;
sqlDataReader.Close();
}
}
} …Run Code Online (Sandbox Code Playgroud) 如何使用正确的方法隐式/自动创建.csv文件,将文本添加到内存中存在的文件,然后将内存数据转换为字节数组?
string path = @"C:\test.txt";
File.WriteAllLines(path, GetLines());
byte[] bytes = System.IO.File.ReadAllBytes(path);
Run Code Online (Sandbox Code Playgroud)
通过这种方法,我总是(好)创建一个文件,写入(好)然后关闭它(坏)然后再从路径打开文件并从硬盘读取它(坏)
我怎样才能改善这一点?
UPDATE
一个近乎好的方法是:
using (var fs = new FileStream(@"C:\test.csv", FileMode.Create, FileAccess.ReadWrite))
{
using (var memoryStream = new MemoryStream())
{
fs.CopyTo(memoryStream );
return memoryStream .ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我无法将文本写入该文件流......只是字节...
更新2
using (var fs = File.Create(@"C:\temp\test.csv"))
{
using (var sw = new StreamWriter(fs, Encoding.Default))
{
using (var ms = new MemoryStream())
{
String message = "Message is the correct ääüö Pi(\u03a0), and Sigma (\u03a3).";
sw.Write(message);
sw.Flush();
fs.CopyTo(ms);
return ms.ToArray();
}
} …Run Code Online (Sandbox Code Playgroud) 考虑:
public static void ConvertFileToUnicode1252(string filePath, Encoding srcEncoding)
{
try
{
StreamReader fileStream = new StreamReader(filePath);
Encoding targetEncoding = Encoding.GetEncoding(1252);
string fileContent = fileStream.ReadToEnd();
fileStream.Close();
// Saving file as ANSI 1252
Byte[] srcBytes = srcEncoding.GetBytes(fileContent);
Byte[] ansiBytes = Encoding.Convert(srcEncoding, targetEncoding, srcBytes);
string ansiContent = targetEncoding.GetString(ansiBytes);
// Now writes contents to file again
StreamWriter ansiWriter = new StreamWriter(filePath, false);
ansiWriter.Write(ansiContent);
ansiWriter.Close();
//TODO -- log success details
}
catch (Exception e)
{
throw e;
// TODO -- log failure details
}
} …Run Code Online (Sandbox Code Playgroud) 使用C#将Stream转换为FileStream的最佳方法是什么?
我正在处理的函数有一个传递给它的Stream包含上传的数据,我需要能够执行stream.Read(),stream.Seek()方法,这些方法是FileStream类型的方法.
一个简单的演员阵容不起作用,所以我在这里寻求帮助.
我们的一个团队将开发一个应用程序来存储SQL2008数据库中的记录,并且每个记录都有一个相关的PDF文件.目前有大约340GB的文件,大多数(70%)大约是100K,但有些是几兆字节.数据主要是插入和读取,但文件有时会更新.我们正在讨论以下选项:
将文件存储为数据库中的BLOB.
将文件存储在数据库之外,并将路径存储在数据库中.
使用SQL2008的文件流功能来存储文件.
我们已经阅读了有关文件流数据的Micrsoft最佳实践,但由于文件大小不同,我们不确定选择哪条路径.我们倾向于选项3(文件流),但有一些问题:
考虑到上面提到的数据量和文件大小,您会选择哪种架构?
数据访问将使用SQL身份验证完成,而不是Windows身份验证,并且Web服务器可能无法使用Windows API访问这些文件.这会使filstream的表现比其他两个选项差吗?
由于SQL备份包含文件流数据,因此会导致非常大的数据库备份.其他人如何使用大量文件流数据处理备份数据库?
filestream ×10
c# ×8
file ×3
stream ×2
.net ×1
binarywriter ×1
blob ×1
django ×1
encoding ×1
io ×1
sql ×1
sql-server ×1
streamreader ×1
streamwriter ×1
tcp ×1
wcf ×1