-3

WPFアプリケーションを開発しています。このアプリケーションでは、Taks(thread)を使用して複数のtxtファイルから読み取り、それらを表示します。

時々例外が発生する

宛先配列は、コレクション内のすべてのアイテムをコピーするのに十分な長さではありません。配列のインデックスと長さを確認してください。

そして詳細に私は読むことができます:

C:\ Windows \ mscorlib.pdb:PDBファイルが見つからないか開くことができません。

と:

タイプ'System.ArgumentException'の最初のチャンスの例外がmscorlib.dllで発生しました

デバッグを開始するという考えはありません。この奇妙な例外にパターンはありません。

更新:txtファイルを読み取るためのコード:

        public void LoadCompassLogFile(String fileName) {
        //Thread.CurrentThread.Priority = ThreadPriority.Highest;
        if (!fileName.Contains("Compass")) {
            throw new FileLoadException("Wrong File");
        }

        CompassLogLoadCompleted = false;
        CompassLogLoadPercent = 0;
        _compassLogCollection.Clear();

        int numberOfSingleLineLog = 0;
        String[] lines = new string[] {};

        String temp = "";
        DateTime dateTime = new DateTime();
        LoggingLvl loggingLvl = new LoggingLvl();
        LoggingLvl.ELoggingLvl eLoggingLvl = new LoggingLvl.ELoggingLvl();
        char[] delimiters = new[] {' '};
        string threadId = "";
        string loggingMessage = "";
        int ff = 0;

        // Read the File and add it to lines string
        try {
            lines = File.ReadAllLines(fileName);
        } catch (Exception e) {
            CompassLogLoadCompleted = true;
            CoreServiceLogLoadCompleted = true;
            Console.WriteLine("The file could not be read:");
            Console.WriteLine(e.Message);
        }

        string[] parts;

        for (int j = 0; j < lines.Count(); j++) {
            string dateAndTimestamp = "";
            if (!CompassLogLoadCompleted) {
                try {
                    lock (_myLock) {
                        parts = lines[j].Split(delimiters,
                                               StringSplitOptions.
                                                   RemoveEmptyEntries);
                    }

                    numberOfSingleLineLog++;
                    foreach (string t in parts) {
                        switch (ff) {
                            case 0:
                                dateAndTimestamp = t;
                                break;
                            case 1:
                                dateAndTimestamp += " " + t.Replace(",", ".");
                                dateTime = DateTime.Parse(dateAndTimestamp);
                                dateAndTimestamp = "";
                                break;
                            case 2:
                                eLoggingLvl = loggingLvl.ParseLoggingLvl(t);
                                break;
                            case 3:
                                threadId = t;
                                break;

                            default:
                                temp += t;
                                break;
                        }

                        ff++;
                    }

                    loggingMessage = temp;

                    temp = "";

                    ff = 0;

                    loggingLvl = new LoggingLvl(eLoggingLvl);

                    CompassLogData cLD = new CompassLogData(
                        numberOfSingleLineLog,
                        dateTime,
                        loggingLvl, threadId,
                        loggingMessage);

                    _compassLogCollection.Add(cLD);

                    //loggingMessage = "";
                } catch (Exception ex) {
                    Console.Out.WriteLine("Shit Happens");
                    Console.Out.WriteLine(ex.StackTrace);
                }
                CompassLogLoadPercent = ((double) j
                                         /lines.Count())*100;
            }
        }

        CompassLogLoadCompleted = true;
        Console.Out.WriteLine("Compass LOADING DONE");

        Console.Out.WriteLine("numberOfSingleLineLog: " +
                              numberOfSingleLineLog);
        Console.Out.WriteLine("");
    }
4

1 に答える 1

0

配列の長さは.netで最大2GBだと思うので、入れるタイプに応じて、long []の場合は(2 ^ 31)/8を分割する必要があり、バイトの場合は(2 ^ 31 )/4 なので、約 500 MB です。あなたのファイルはそれより大きいですか?

PDB が見つからないという 2 番目の問題では、[ツール] --> [オプション] --> [デバッグ] --> [シンボル] に移動し、[Microsoft シンボル サーバー] を選択すると、問題を解決できます。

十分な情報があれば、これで最後の問題も解決できます...

于 2013-02-22T13:15:43.827 に答える