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

推荐订阅源

Cisco Talos Blog
Cisco Talos Blog
阮一峰的网络日志
阮一峰的网络日志
云风的 BLOG
云风的 BLOG
D
Docker
Vercel News
Vercel News
IT之家
IT之家
Recent Announcements
Recent Announcements
Last Week in AI
Last Week in AI
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
腾讯CDC
Google DeepMind News
Google DeepMind News
I
InfoQ
博客园 - 三生石上(FineUI控件)
Apple Machine Learning Research
Apple Machine Learning Research
The GitHub Blog
The GitHub Blog
博客园 - Franky
The Cloudflare Blog
A
About on SuperTechFans
有赞技术团队
有赞技术团队
Y
Y Combinator Blog
T
Tenable Blog
P
Proofpoint News Feed
Recorded Future
Recorded Future
Security Latest
Security Latest
H
Hackread – Cybersecurity News, Data Breaches, AI and More
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 聂微东
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Google Online Security Blog
Google Online Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Simon Willison's Weblog
Simon Willison's Weblog
The Last Watchdog
The Last Watchdog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
News and Events Feed by Topic
TaoSecurity Blog
TaoSecurity Blog
U
Unit 42
The Hacker News
The Hacker News
Martin Fowler
Martin Fowler
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
F
Full Disclosure
M
MIT News - Artificial intelligence
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
V
V2EX
Project Zero
Project Zero

博客园 - 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。