C# I';我正试图使用FileStream创建一个文件,但遇到了一个异常为什么?

C# I';我正试图使用FileStream创建一个文件,但遇到了一个异常为什么?,c#,winforms,C#,Winforms,代码如下: public OptionsFile(string settings) { if (File.Exists(settings)) { } else { FileStream fs=File.Create(settings); fs.Close(); } path_exe

代码如下:

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(设置)

由于某种原因,它无法创建该文件。 在表格1中,我在构造函数中执行了以下操作:

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);
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;
        
    }
然后在选项文件中执行以下操作:

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);
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;
        
    }
我在选项文件中使用了断点,并看到设置包含带有settings.txt文件的用户目录,但由于某些原因,它无法生成以下行:

FileStream fs=File.Create(settings);
它停在Form1的行上:Options_DB.Get_Video_File()

“ScreenVideoRecorder.Options\u 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 fs=File.Create(设置)

尝试创建时,设置将继续:

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

但是它从来没有创建过它。

例外很清楚:路径
“C:\Users\bout0\u 000\AppData\Local\ScreenVideoRecorder\ScreenVideoRecorder\settings\”

不存在

请注意,此路径不同于:

“C:\Users\user name\AppData\Local\project dir\project dir\settings\”

异常状态为:

找不到路径“C:\Users\bout0\u 000\AppData\Local\ScreenVideoRecorder\ScreenVideoRecorder\settings\settings.txt”的一部分


因此,您需要检查该文件或文件夹是否存在,或者您是否具有写入该特定文件夹的权限。

如果您阅读了内部异常,您可以看到问题是
设置
目录不存在。您可以通过调用来解决这个问题,这将在指定路径中创建所有不存在的目录和子目录。(如果目录已存在,则不会执行任何操作。)

我还建议将手动路径连接替换为调用


找不到路径“…\ScreenVideoRecorder\ScreenVideoRecorder\settings\settings.txt”的一部分。
是否存在
settings
文件夹?除了所有正确答案之外:请不要这样连接路径。因为他想创建那个文件(如果它不存在的话),所以很明显这个文件夹不存在。