1

アプリケーションのアイデアは単純です。アプリケーションにはパスが与えられ、アプリケーションは各ファイルのパスを XML に書き込みます。私が直面している問題は、ファイル名に無効な文字が含まれている可能性があり、アプリケーションが動作しなくなることです。コードは次のとおりです。ファイル情報を XML に解析するために使用します。

    // the collecting details method
    private void Get_Properties(string path)
    {
        // Load the XML File
        XmlDocument xml = new XmlDocument();
        xml.Load("Details.xml");

        foreach (string eachfile in Files)
        {
            try
            {
                FileInfo Info = new FileInfo(eachfile);

                toolStripStatusLabel1.Text = "Adding : " + Info.Name;

                // Create the Root element
                XmlElement ROOT = xml.CreateElement("File");

                if (checkBox1.Checked)
                {
                    XmlElement FileName = xml.CreateElement("FileName");
                    FileName.InnerText = Info.Name;
                    ROOT.AppendChild(FileName);
                }

                if (checkBox2.Checked)
                {
                    XmlElement FilePath = xml.CreateElement("FilePath");
                    FilePath.InnerText = Info.FullName;
                    ROOT.AppendChild(FilePath);
                }

                if (checkBox3.Checked)
                {
                    XmlElement ModificationDate = xml.CreateElement("ModificationDate");
                    string lastModification = Info.LastAccessTime.ToString();
                    ModificationDate.InnerText = lastModification;
                    ROOT.AppendChild(ModificationDate);
                }

                if (checkBox4.Checked)
                {
                    XmlElement CreationDate = xml.CreateElement("CreationDate");
                    string Creation = Info.CreationTime.ToString();
                    CreationDate.InnerText = Creation;
                    ROOT.AppendChild(CreationDate);
                }

                if (checkBox5.Checked)
                {
                    XmlElement Size = xml.CreateElement("Size");
                    Size.InnerText = Info.Length.ToString() + " Bytes";
                    ROOT.AppendChild(Size);
                }

                xml.DocumentElement.InsertAfter(ROOT, xml.DocumentElement.LastChild);

                // +1 step in progressbar
                toolStripProgressBar1.PerformStep();
                success_counter++;
                Thread.Sleep(10);
            }
            catch (Exception ee)
            {
                toolStripProgressBar1.PerformStep();

                error_counter++;
            }
        }

        toolStripStatusLabel1.Text = "Now Writing the Details File";

        xml.Save("Details.xml");

        toolStripStatusLabel1.Text = success_counter + " Items has been added and "+ error_counter +" Items has Failed , Total Files Processed ("+Files.Count+")";

        Files.Clear();
    }

詳細の生成後の XML は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
 <Files>
  <File>
    <FileName>binkw32.dll</FileName>
    <FilePath>D:\ALL DLLS\binkw32.dll</FilePath>
    <ModificationDate>3/31/2012 5:13:56 AM</ModificationDate>
    <CreationDate>3/31/2012 5:13:56 AM</CreationDate>
    <Size>286208 Bytes</Size>
  </File>
 <File>

問題なく XML に解析したい文字の例:

BX]GC^O^_nI_C{jv_rbp&1b_H âo&psolher d) doိiniᖭ</p>

icon_Áq偩侉₳㪏ံ�ぞ鵃_䑋屡1]

MAnaFor줡�

編集 [問題解決]

私がしなければならなかったのは:1-ファイル名をUTF8バイトに変換する2-UTF8バイトを文字列に戻す

メソッドは次のとおりです。

byte[] FilestoBytes = System.Text.Encoding.UTF8.GetBytes(Info.Name);
string utf8 = System.Text.Encoding.UTF8.GetString(FilestoBytes);
4

3 に答える 3

3

どのキャラクターに問題があるかは明確ではありません。XML API を使用している限り (XML を自分で直接書き出そうとするのではなく) 、有効なテキストであれば問題ないはずですが (サロゲート ペアが壊れていると問題が発生する可能性があります)、有効でないのは Unicode コード ポイントが少ないことです。タブ、キャリッジ リターン、ライン フィードを除いて、スペース (U+0020) よりも。それらは、XML では対応できません。

于 2012-04-16T17:25:15.803 に答える
2

xml の形式が正しくない可能性があります。Xml ファイルには、エスケープしないと一部の文字を含めることができません。たとえば、これは無効です。

<dummy>You & Me</dummy>

代わりに、次を使用する必要があります。

<dummy>You &amp; Me</dummy>

XML の不正な文字は &、<、および > (および属性の " または ') です。

于 2012-04-16T17:28:25.743 に答える
1

XML の不正な文字は &、<、および > (および属性の " または ') です。

Windows のファイル システムでは、ファイル名に & と ' のみを使用できます (<,>," はファイル名に使用できません)。

XML を保存する際に、これらの文字をエスケープできます。たとえば、 & が必要になります&amp;

于 2012-04-16T17:33:52.013 に答える