gpt4 book ai didi

c# - 我正在尝试使用 FileStream 创建文件但出现异常,为什么?

转载 作者:行者123 更新时间:2023-11-30 20:57:14 26 4
gpt4 key购买 nike

这是代码:

public OptionsFile(string settings)
{

if (File.Exists(settings))
{

}
else
{
FileStream fs=File.Create(settings);

fs.Close();
}

path_exe = Path.GetDirectoryName(Application.LocalUserAppDataPath);
Options_File = settings;

}

线上:FileStream fs=File.Create(settings);

由于某种原因,它无法创建文件。在 Form1 中,我在构造函数中做了:

Options_DB.Get_Video_File();

现在在 Options_DB 类中使用它正在做的断点:

namespace test
{

static class Options_DB
{
static string settings_dir;
static string settings_file;
static OptionsFile setting_file;
static string path_settings;
static string path_exe;
static string outPutVideoFileDirectory;

static Options_DB()
{
// --- O P E N N I N G S E T T I N G F I L E ;
path_exe = Path.GetDirectoryName(Application.LocalUserAppDataPath);
path_settings = Path.GetDirectoryName(Application.LocalUserAppDataPath);
settings_file = "\\settings.txt";
settings_dir = path_settings + @"\settings";
setting_file = new OptionsFile(settings_dir + settings_file);

然后在 OptionsFile 中它正在做:

public OptionsFile(string settings)
{

if (File.Exists(settings))
{

}
else
{
FileStream fs=File.Create(settings);

fs.Close();
}

path_exe = Path.GetDirectoryName(Application.LocalUserAppDataPath);
Options_File = settings;

}

我在 OptionsFile 中使用了一个断点,看到设置包含带有 settings.txt 文件的用户目录,但由于某种原因它无法创建该行:

FileStream fs=File.Create(settings);

它在 Form1 上停止:Options_DB.Get_Video_File();

“ScreenVideoRecorder.Options_DB”的类型初始值设定项引发异常

System.TypeInitializationException was unhandled
HResult=-2146233036
Message=The type initializer for 'ScreenVideoRecorder.Options_DB' threw an exception.
Source=ScreenVideoRecorder
TypeName=ScreenVideoRecorder.Options_DB
StackTrace:
at ScreenVideoRecorder.Options_DB.Get_Video_File()
at ScreenVideoRecorder.Form1..ctor() in d:\C-Sharp\ScreenVideoRecorder\ScreenVideoRecorderWorkingVersion\Form1.cs:line 54
at ScreenVideoRecorder.Program.Main() in d:\C-Sharp\ScreenVideoRecorder\ScreenVideoRecorderWorkingVersion\Program.cs:line 18
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException: System.IO.DirectoryNotFoundException
HResult=-2147024893
Message=Could not find a part of the path 'C:\Users\bout0_000\AppData\Local\ScreenVideoRecorder\ScreenVideoRecorder\settings\settings.txt'.
Source=mscorlib
StackTrace:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
at System.IO.File.Create(String path)
at DannyGeneral.OptionsFile..ctor(String settings) in d:\C-Sharp\ScreenVideoRecorder\ScreenVideoRecorderWorkingVersion\OptionsFile.cs:line 73
at ScreenVideoRecorder.Options_DB..cctor() in d:\C-Sharp\ScreenVideoRecorder\ScreenVideoRecorderWorkingVersion\Options_DB.cs:line 29
InnerException:

出于某种原因,在执行断点步骤后无法创建 FileStream 。我猜这行有问题:FileStream fs=File.Create(settings);

尝试创建它时设置继续:

"C:\\Users\\user name\\AppData\\Local\\project dir\\project dir\\settings\\settings.txt"

但它永远不会创建它。

最佳答案

如果您阅读内部异常,您会发现问题是 settings 目录不存在。您可以通过调用 Directory.CreateDirectory 来解决此问题,它会在指定路径中创建尚不存在的所有目录和子目录。 (如果目录已经存在,它什么也不做。)

我还建议用 Path.Combine 替换您的手动路径连接电话。

settings_dir = Path.Combine(path_settings, "settings");
Directory.CreateDirectory(settings_dir); // create directory

settings_file = "settings.txt";
setting_file = new OptionsFile(Path.Combine(settings_dir, settings_file));

关于c# - 我正在尝试使用 FileStream 创建文件但出现异常,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16962800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com