惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
D
Docker
Blog — PlanetScale
Blog — PlanetScale
罗磊的独立博客
美团技术团队
V
V2EX
Last Week in AI
Last Week in AI
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Microsoft Security Blog
Microsoft Security Blog
Microsoft Azure Blog
Microsoft Azure Blog
人人都是产品经理
人人都是产品经理
M
MIT News - Artificial intelligence
P
Proofpoint News Feed
B
Blog RSS Feed
博客园_首页
B
Blog
博客园 - 叶小钗
I
InfoQ
WordPress大学
WordPress大学
L
LangChain Blog
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
MyScale Blog
MyScale Blog
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
Latest news
Latest news
W
WeLiveSecurity
T
The Exploit Database - CXSecurity.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
Cyberwarzone
Cyberwarzone
Scott Helme
Scott Helme
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
C
CXSECURITY Database RSS Feed - CXSecurity.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
N
News and Events Feed by Topic
S
Secure Thoughts
The Hacker News
The Hacker News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News

博客园 - zsi

在线程中调用SaveFileDialog DSOFramer 之一:在 64 位系统注册 DSOFramer GridView 绑定数据不满一页时填充空行的方法 GridView 始终显示 Pager 分页行的一种方法 Chrome: Google加入浏览器大战之兼容性 调用unrar.dll时SEHException外部组件异常的处理 ASP.NET 2.0无法打开到 SQL Server 的连接 给ASP.NET程序换换地儿 对象序列化:经验小结 对象序列化:使用XmlSerializer走完最后一步 对象序列化:使用System.Xml.Serialization命名空间 在.NET中实现对象序列化 了解HTTP协议一些有用资料 Yahoo!十岁! 在VB.NET中处理构造函数时值得注意的两个陈述 微软新发布的共享设计模式的WIKI 还不快进入Design Pattern的世界? 另人费解的IsNot关键字 也说金山词霸2005内存泄露的问题
扯扯OpenFileDialog和.NET的缺省目录
zsi · 2005-05-10 · via 博客园 - zsi

  这两天在写一个小程序,帮助自己做一些碎且杂的工作。程序也没什么复杂的处理,应该很简单就完成了,谁知道却牵出一档子事儿来。到底怎么回事?请听我一一道来。
   写过IO处理程序的人都知道,在VB.NET中,如果只指定了文件名,而没有指定目录,那么当读写文件时,程序从启动目录读取文件。也就是说:.NET默认以程序的启动目录为缺省目录。例如,我的程序放在C:\Test\bin\目录下,程序中有下面一段写文件的代码,方式I:


   在程序运行中,StreamWriter将在C:\Test\bin\目录下创建一个名为abc.txt的文本文件。上面的代码与下面的代码是一样的,方式II:

' 用Application.StartupPath指定目录
Dim sw As New StreamWriter(Application.StartupPath & “\abc.txt”)

   正因为如此,所以在我的小程序里,就是使用方式I。但是问题恰恰出在这里。后来,程序增加了一段代码,其中使用到了OpenFileDialog。就在增加这段代码以后,发现方式I中写abc.txt的代码失效了。每次我使用OpenFileDialog以后,再调用方式I的方法时,总是不能把内容写入C:\Test\bin\目录下的abc.txt文件中。
  经过好多次测试,这个问题依然没有解决,我甚至怀疑这是否是.NET的Bug。前面的测试我都把重点放在了:.NET以程序的启动目录为默认目录。那段代码中。最后一次测试,我转移了目标,我想会不会是写文件的代码有问题呢?带着这个疑问,我把写文件的代码由方式I变成了方式II。测试,通过!
   回过头来再看写文件的这段代码,方式II和方式I的差别在于是否明确指定了目录。如前面所言,.NET默认以程序的启动目录为缺省目录。但是在使用OpenFileDialog的情况下,缺省目录随OpenFileDialog打开的文件目录而变化。缺省目录变成了OpenFileDialog打开的文件所在的目录。如果打开了D:\My Documents\里面的文件,那么缺省目录就成了D:\My Documents\。当调用方式I的代码时,实际是在D:\My Documents\下创建并改写abc.txt文件,C:\Test\bin\abc.txt当然不会有变化。

   总结:在程序中读写文件时应明确指定文件目录,尽量不使用.NET的缺省目录。这在大型系统中尤为重要,因为大系统中往往用到OpenFileDialog。
   另外,还应该注意SaveFileDialog和FolderBrowserDialog。