我使用的时候遇到了一些有趣的StreamWriter与FileStream将文本追加到在.NET 4.5的现有文件(没有尝试过任何旧框架).我尝试了两种方法,一种方法有效,一种方式无效.我想知道两者之间有什么区别.
两种方法都在顶部包含以下代码
if (!File.Exists(filepath))
using (File.Create(filepath));
Run Code Online (Sandbox Code Playgroud)
我在using声明中创建了因为我通过个人经验发现它是确保应用程序完全关闭文件的最佳方法.
非工作方法:
using (FileStream f = new FileStream(filepath, FileMode.Append,FileAccess.Write))
(new StreamWriter(f)).WriteLine("somestring");
Run Code Online (Sandbox Code Playgroud)
使用此方法,最终不会将任何内容附加到文件中.
工作方式:
using (FileStream f = new FileStream(filepath, FileMode.Append,FileAccess.Write))
using (StreamWriter s = new StreamWriter(f))
s.WriteLine("somestring");
Run Code Online (Sandbox Code Playgroud)
我做了一些谷歌搜索,不知道要搜索什么,并没有找到任何信息.那么,为什么匿名StreamWriter失败的地方(非匿名?名字?)StreamWriter有效?
我正在尝试用C#编写一个程序,它将带有多个联系人的vCard(VCF)文件拆分为每个联系人的单个文件.据我所知,vCard需要保存为ANSI(1252)才能让大多数手机读取它们.
但是,如果我用打开VCF档案StreamReader,然后将其用回写StreamWriter(设置1252的编码格式),所有的特殊字符,如å,æ和ø越来越写成?.当然ANSI(1252)会支持这些字符.我该如何解决?
编辑:这是我用来读写文件的代码片段.
private void ReadFile()
{
StreamReader sreader = new StreamReader(sourceVCFFile);
string fullFileContents = sreader.ReadToEnd();
}
private void WriteFile()
{
StreamWriter swriter = new StreamWriter(sourceVCFFile, false, Encoding.GetEncoding(1252));
swriter.Write(fullFileContents);
}
Run Code Online (Sandbox Code Playgroud) 我想知道是否有必要Close()在下列情况下打电话(如果没有必要,为什么?)
using (var file = System.IO.File.OpenText(myFilePath))
{
...
}
Run Code Online (Sandbox Code Playgroud)
我认为在以下情况下是必要的
StreamWriter file2 = new System.IO.StreamWriter(myFilePath);
newFileContents.ForEach(file2.WriteLine);
file2.Close();
Run Code Online (Sandbox Code Playgroud)
这是对的吗?
编辑:
我认为我的问题很接近() - 具体,可能是阅读和写作之间的区别....
大约一年了,我在尝试使用Visual C#以编程方式发送和接收电子邮件时遇到了问题.我在网上发现的数百个例子中没有一个例子.不,我不只是复制和粘贴.我研究代码,并根据需要修改/添加/删除.
有人可以帮我解决这个问题.我正在努力完成一个应该是我去年开始制作的简单程序,而且事实证明我几乎不可能弄明白.
老实说,我不知道该怎么做了.该文档没有向我提供任何有用的信息,因为它没有任何工作.我已经将示例代码提供给其他人使用,它适用于他们 - 但不是我!这是如何运作的?
我不知道SENDING邮件是否依赖于我的计算机具有的安全/防火墙设置.但就这种情况而言,我甚至暂时完全关闭所有安全和防火墙设置,以确定它是否会发送电子邮件.
我已经没有代码了,因为我刚刚开始尝试再次做这件事,如果有人能帮我完成这项工作,我真的很感激.
所以,我要做的就是:
使用2个按钮和一个文本框创建一个简单的表单.(完成,当然)
button1检查电子邮件(但只在消息框中显示主题和发件人,不下载消息)
button2将textBox1的内容发送到" username@bluebottle.com"
我的服务器设置是:
Username username@bluebottle.com
Password ***********
IMAP/POP Server (Incoming): mail.bluebottle.com
SMTP Server (Outgoing): mail.bluebottle.com
SMTP should be port 25, 26 or 587
POP3 should be port 110, using SSL 995
IMAP should be port 143, using SSL 993
Run Code Online (Sandbox Code Playgroud)
我看到它用过,我在这里和那里读到它,它与内存管理有关.问题是,您怎么知道何时应该使用它?如果你不使用变量或实例会导致问题,你如何区分?
确切的重复:什么是C#使用块,我为什么要使用它?
可能重复:
哪个更好,何时:使用语句或在C#中的IDisposable上调用Dispose()?
我什么时候应该在C#中使用"使用"块?
使用if语句?
正确地说,我将如何使用using声明?我有一个教程打开,我不明白.我可以看到超过1种不同的实现方式.哪种方式正确或偏好?
我读了这篇文档,但我仍然感到困惑.
using (Font font1 = new Font("Arial", 10.0f))
{
byte charset = font1.GdiCharSet;
}
Run Code Online (Sandbox Code Playgroud)
在代码中,是否意味着我们引入了一个名为Font类的新实例font1.但是,此实例仅在大括号内存活.在代码中我们可以再次实例化,font1但这将是一个完全不同的实例,因为前一个font1是disposed.
它是否正确?那么目的是什么?我们可以重新分配不同的值font1而不处理前一个值?
通过阅读这篇文章,我有点困惑:
他们演示了调用2个一次性对象,结束了更多的内存使用,而没有usings 的方法,执行相同的指令,使用较低的内存.
你能解释一下为什么在这个例子中使用会增加内存消耗吗?
我想了解在某些情况下是否应该避免使用.
我认为dispose释放记忆是一个好主意,但看起来我错了.