不使用“保存文件”对话框保存文件
本文关键字:保存文件 对话框 | 更新日期: 2023-09-27 18:32:26
我仍在做这个项目,但我遇到了一个问题。好吧,这就是我需要做的。
当用户单击"保存"按钮时,将所选记录写入 在 txtFilePath 中指定的文件(绝对路径不是相对的),没有 截断当前内部的值并处理出现的任何异常。
好的,这是我的代码:
private void Save_Click(object sender, EventArgs e)
{
string filePath = txtFilePath.Text;
if (!File.Exists(filePath))
{
FileStream fs = File.Create(filePath);
fs.Close();
}
using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
using (StreamWriter sw = new StreamWriter(fs))
{
foreach (string line in employeeList.Items)
{
sw.WriteLine(line);
}
}
}
}
现在,当我进入我的程序并想从 employeelist.text 中保存某些内容时,它没有保存到我保存它的位置。我不知道我的代码中是否缺少某些内容或什么,但它不会保存。下面是一个示例:
我在员工列表和文本框中将人名添加到此列表中 I 有一个名为 C:''employess''employeelist 的文件.txt我想把它保存到。 我单击保存按钮,然后转到该员工列表,但它不是 得救。
我不知道我做错了什么,我一直在网上寻找解决方案,但我还没有找到任何东西。谢谢
需要仔细检查的一些事项:
- 确保在测试时没有打开员工列表.txt文件
- 确保文件名中没有无效字符
- 确保应用程序有权将文件保存到指定的位置
- 使用调试器单步执行代码并查找吞噬的异常 - 必须有未创建文件的原因。
- 检查您的
Save_Click
事件是否连接到您的按钮 - 您的示例中的代码是否正在运行?
检查这些内容后,您可能需要按照以下示例了解项目的创建与追加要求:
string path = txtFilePath.Text;
// This text is added only once to the file.
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
foreach (var line in employeeList.Items)
sw.WriteLine(line.ToString());
}
}
else
{
using (StreamWriter sw = File.AppendText(path))
{
foreach (var line in employeeList.Items)
sw.WriteLine(line.ToString());
}
}
如果文件不存在,这将创建该文件,如果存在,这将附加到该文件。
检查文件是否存在然后创建它有点没有必要,因为这都可以由 StreamWriter/FileStream 部分处理。 所以你上面的函数可以简化为以下内容:
public void Save_Click(object sender, EventArgs e)
{
StreamWriter file =
new StreamWriter(txtFilePath.Text, true);//Open and append
foreach (object item in employeeList.Items) {
file.WriteLine(item.toString());
}
file.Close();
}
[更新]
txtFilePath
有哪些类型,前者employeeList
建议它是一个文本框,后者建议它可能绑定到非 GUI 元素?(摇摆)
您可能还想在末尾附加一个空行,以便在进一步保存时您可以分辨出它是一个附加而不是一个长列表(当然取决于您的需要)
从 .Net Framework 4 开始,你可以这样做:
private void Save_Click(object sender, EventArgs e)
{
File.AppendAllLines(txtFilePath.Text, employeeList.Items);
}
当然,您可能希望添加检查以获得有效的路径和有效的字符串枚举。
如果路径看起来像一个相对路径(即不以驱动器号开头),那么它将以这种方式解释。
- 如果在文本框中放置完整路径,文件是否会保存在正确的位置? 如果是这样,也许这就是本意。
- 如果用户没有输入完整路径,您是否有办法使其成为完整路径(例如,只需粘贴 C:''一开始)? 或者至少你能知道什么时候没有完整的路径,并拒绝请求?