vs2010打不开.cs文件,双击文件打开后变成以记事本打开文件,而且打开后是空的记事本文件。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vs2010打不开.cs文件,双击文件打开后变成以记事本打开文件,而且打开后是空的记事本文件。相关的知识,希望对你有一定的参考价值。

我之前关掉vs的时候没问题,后来电脑关机关不掉就强制关机了一次,是因为强制关机的原因吗,有什么办法能让我找回源代码?

。。。。关机前恐怕根本就没写入文件。。。
可以参考这个:
保存自动恢复信息的时间间隔: <n> 分钟
使用此选项可以自定义在编辑器中自动保存文件的频率。For previously saved files, a copy of the file is saved in \...\My Documents\Visual Studio <version>\Backup Files\< projectname>. 如果文件是新的,且尚未手动保存过,则使用一个随机生成的文件名来自动保存该文件。
保留自动恢复信息的天数: <n> 天
使用此选项可以指定 Visual Studio 对于为自动恢复创建的文件保留多长时间。

就是说你可以尝试去上面提到的目录去找找看

如果这也不行的话,可以尝试一些文件恢复工具,不过不要抱太大希望,这里不是覆盖不覆盖的问题了。。。。专业点可以用磁盘编辑工具去定位去在16进制情况下恢复,但是太麻烦了,而且估计也是去上面提到的那个目录。。。。看你这个项目非常简单,没这必要吧?用专业的硬件设备去恢复磁盘什么的更不推荐了。。。太贵了。。。。
参考技术A 首先查看文件默认打开方式是否正确,其次可以重新安装下VS 参考技术B 重新下载一遍,下个游戏盒试一试。 参考技术C 我刚刚遇上这个问题,在此解答希望能帮助到大家
我是工程里面的.cpp文件在打开此工程后强制关机,再开机时,把工程打开,再双击解决方案中的.cpp文件,结果直接以记事本的方式打开,并且还是空的。
解决方法很简单,用文件恢复工具恢复一下就好。
至少我是这样做的

双击关联文件时,文件打不开,程序崩溃

【中文标题】双击关联文件时,文件打不开,程序崩溃【英文标题】:When Double-Clicking On Associated File, File Won't Open And Program Crashes 【发布时间】:2015-01-30 22:42:19 【问题描述】:

我在相关程序中打开文件时遇到了一个特殊问题。首先,我双击一个文件,单击“打开方式...”,然后单击进入程序项目文件中的 Debug 文件夹并运行可执行文件。这是为了模拟在与之关联的程序中打开文件,就好像该程序实际安装在我的计算机上一样。

这是 Program.cs 的完整代码:

namespace TriviaAuthor_v10

    static class Program
    
        [STAThread]
        static void Main(string[] args)
        
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmSplashScreen());
            if (args.Length > 0)
                Application.Run(new frmMain(args[0]));
            else
                Application.Run(new frmMain());
        
    

下面是主窗体的两个构造函数的代码:

    public frmMain(string autoopenfilepath)
    
        InitializeComponent();
        filepath = autoopenfilepath;
        OpenTheFile(filepath);
    

    public frmMain()
    
        InitializeComponent();
    

这是打开文件的代码:

    private void OpenTheFile(string ThisFilePath)
    
        // First we get the filename.
        filename = Path.GetFileName(ThisFilePath);
        FilenameSansExtension = Path.GetFileNameWithoutExtension(ThisFilePath);
        // Create a file stream.
        FileStream fs = new FileStream(ThisFilePath, FileMode.Open, FileAccess.Read);
        // Create the writer for data.
        BinaryReader br = new BinaryReader(fs);
        GameInfo.GameTitle = br.ReadString();
        GameInfo.GameAuthor = br.ReadString();
        GameInfo.DateCreated = br.ReadString();
        GameInfo.NumberOfQuestions = br.ReadInt32();
        GameInfo.TitlePageImagePresent = br.ReadBoolean();
        GameInfo.TitlePageImage = br.ReadString();
        GameInfo.IntroScreenAudioPresent = br.ReadBoolean();
        GameInfo.IntroScreenAudio = br.ReadString();
        GameInfo.FinalScoreAudioPresent = br.ReadBoolean();
        GameInfo.FinalScoreAudio = br.ReadString();
        GameInfo.ActiveQuestion = br.ReadInt32();

        if (GameInfo.NumberOfQuestions > 0)
        
            for (int i = 0; i < GameInfo.NumberOfQuestions; i++)
            
                clsQuestionClass Question = new clsQuestionClass();

                Question.NewQuestion = br.ReadString();
                Question.Points = br.ReadInt32();
                Question.QuestionType = br.ReadInt32();
                Question.QuestionImagePresent = br.ReadBoolean();
                Question.QuestionImage = br.ReadString();

                Question.QuestionAudioPresent = br.ReadBoolean();
                Question.QuestionAudio = br.ReadString();

                Question.IncludeTimer = br.ReadBoolean();
                Question.TimerTime = br.ReadInt32();
                Question.TickTock = br.ReadBoolean();

                Question.AIsChecked = br.ReadBoolean();
                Question.AnswerA = br.ReadString();
                Question.AIsCorrect = br.ReadBoolean();

                Question.BIsChecked = br.ReadBoolean();
                Question.AnswerB = br.ReadString();
                Question.BIsCorrect = br.ReadBoolean();

                Question.CIsChecked = br.ReadBoolean();
                Question.AnswerC = br.ReadString();
                Question.CIsCorrect = br.ReadBoolean();

                Question.DIsChecked = br.ReadBoolean();
                Question.AnswerD = br.ReadString();
                Question.DIsCorrect = br.ReadBoolean();

                Question.TrueOrFalse = br.ReadBoolean();

                Question.FillInBlankAnswer = br.ReadString();

                Question.AnswerResponseImagePresent = br.ReadBoolean();
                Question.AnswerResponseImage = br.ReadString(); ;
                Question.CorrectAnswerResponse = br.ReadString();
                Question.IncorrectAnswerResponse = br.ReadString();

                Question.CorrectAnswerResponseAudioPresent = br.ReadBoolean();
                Question.CorrectAnswerResponseAudio = br.ReadString();
                Question.IncorrectAnswerResponseAudioPresent = br.ReadBoolean();
                Question.IncorrectAnswerResponseAudio = br.ReadString();

                Questions.Add(Question);
                Questions.Count();
            
        
        fs.Close();
        br.Close();
        QuestionIndex = GameInfo.ActiveQuestion;
        LoadGameIntoGameGUI(Questions[QuestionIndex]);
        this.Text = "Trivia Author v1.0 - " + FilenameSansExtension;
        ProjectNeedsSaving = false;
        saveAsToolStripMenuItem.Enabled = closeprojecttoolStripMenuItem1.Enabled = exportgametoolStripMenuItem.Enabled =
        printToolStripMenuItem.Enabled = printPreviewToolStripMenuItem.Enabled = tsbtnProjectClose.Visible =
        ProjectIsOpen = saveToolStripMenuItem.Enabled = tsbtnSaveProject.Enabled = btnShowProjectReview.Enabled = true;

        UpdateGameSummary();
    

注意:“OpenTheFile(string ThisFilePath)”用于使用 OpenFileDialog 打开文件,以及当我尝试通过双击打开文件时。

所以问题来了:当我在 Visual Studio 2013 中运行程序然后打开文件(使用 OpenFileDialog)时,文件打开时没有问题。但是,当我尝试通过双击该文件并使用程序的 Debug 文件夹中的可执行文件打开它时,我看到程序的启动画面,然后程序中止。它

在我看来,文件的路径正在正确地中继到“OpenTheFile()”。而且由于程序在 Visual Studio 之外运行,我没有收到任何错误消息,甚至来自操作系统。

【问题讨论】:

AutoOpenFile 方法有什么作用? 当您单步执行代码时会发生什么...您是否看到任何立即突出的内容会引起对潜在问题的注意...?您是否尝试将FileShare.Read 添加到此行FileStream fs = new FileStream(ThisFilePath, FileMode.Open, FileAccess.Read); 您可以使用try catchAutoOpenFile(filepath); 并获取有关异常的信息(进入文件或消息框)。 对不起,古法。我已经更新它,“AutoOpenFile()”现在是“OpenTheFile()”。 对不起,古法。我已对其进行了更新,因此“AutoOpenFile()”现在是“OpenTheFile()”。 MethodMan:添加 FileShare.Read 没有帮助。 Nadia:我试过 try-catch,但看起来程序在 MessageBox 有机会显示之前就崩溃了。 【参考方案1】:

让我们重新开始。您在应用程序的一开始就检查参数。如果它到达LoadGameIntoGameGUI() 并在那里粉碎(在读取文件之后),这意味着某些东西被传递给了程序。正如您提到的,您已经添加了一个消息框,我假设您现在运行了正确版本的程序,但您仍然有一个异常。它是完全相同的例外吗?如果是这样,您介意发布LoadGameIntoGameGUI 的代码吗?

顺便说一句,if 这里是不必要的,如果GameInfo.NumberOfQuestions==0 无论如何都会忽略循环:

 if (GameInfo.NumberOfQuestions > 0)
    
        for (int i = 0; i < GameInfo.NumberOfQuestions; i++)

这些数字和问题是什么?你把其中一个传给LoadGameIntoGameGUI,你确定它是正确的吗?您可以添加日志文件并检查输入。 File.WriteAllText("your log.txt", question.ToString()); 之类的东西(确保 ToString 返回有意义的东西)。

【讨论】:

谢谢,Nadia,但 MessageBox 没有机会展示。我还尝试了此链接上的示例:tech.pro/tutorial/668/… 但它也不起作用。有没有办法记录未处理的异常并将其存储在某处?此外,Program.cs 中的代码与该项目的早期版本相同,双击文件在该版本中打开得很好,所以我想知道是否包含文件路径的字符串(来自 Program.cs 中的 args[0] ) 没有到达主程序文件中的目的地(frmMain.cs 中的 OpenTheFile())。 似乎异常是由操作系统生成的,而不是您的应用程序。在执行每一行代码后,我试图写一个日志,也许这可以澄清一些事情。您还可以注释掉代码的某些部分,从您认为可疑的部分开始,这样您就可以看看自己是否正确。 另一件事 - 你看过 Windows 事件日志吗?可能有一些关于它的东西。 Nadia:我在上面发布了一些关于 Windows 事件日志的内容。在这里发表评论太长了。 嗯...重命名或删除错误的文件。此外,在 VS 中更改应用程序的版本可能会有所帮助。

以上是关于vs2010打不开.cs文件,双击文件打开后变成以记事本打开文件,而且打开后是空的记事本文件。的主要内容,如果未能解决你的问题,请参考以下文章

VS2015 C#的.cs文件打不开?

vs2010(vs2008、vs2012)打不开

vs2010 c++打开项目是空白的

转foxmail突然打不开了,双击没反应,怎么回事呀

新手不会用vs2010求大神帮忙如何解决窗体打不开

Excel文件第一次双击打不开,退出后第二次双击就能打开。