2
        public void CreateFileOutput(object parameter)
        {
            string workSheetName, targetFile;
            workSheetName = "data"; targetFile = "data.csv";
            string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + SourceAppFilePath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';";
            OleDbConnection conn = null;
            StreamWriter wrtr = null;
            OleDbCommand cmd = null;
            OleDbDataAdapter da = null;
            try
            {
                conn = new OleDbConnection(strConn);
                conn.Open();
                cmd = new OleDbCommand("SELECT * FROM [" + workSheetName + "$]", conn);
                cmd.CommandType = CommandType.Text;
                wrtr = new StreamWriter(targetFile);
                da = new OleDbDataAdapter(cmd);
                DataTable dt = new DataTable();
                da.Fill(dt);
                for (int x = 0; x < dt.Rows.Count; x++)
                {
                    string rowString = "";
                    for (int y = 0; y < dt.Columns.Count; y++)
                    {
                        rowString += "\"" + dt.Rows[x][y].ToString() + "\",";
                    }
                    wrtr.WriteLine(rowString);
                }
                Console.WriteLine();
                Console.WriteLine("Done! Your " + SourceAppFilePath + " has been converted into " + targetFile + ".");
                Console.WriteLine();
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.ToString());
                Console.ReadLine();
            }
            finally
            {
                if (conn.State == ConnectionState.Open)
                    conn.Close();
                conn.Dispose();
                cmd.Dispose();
                da.Dispose();
                wrtr.Close();
                wrtr.Dispose();
            }
        }

XLS ファイルは csv に変換されています。for ループで確認できますが、デスクトップからソース .xls ファイルを取得しているため、デスクトップの場所にある最終出力ファイル"Data.csv"wrtr.WriteLine(rowString); を確認したいと考えています。解決策を教えてください。ありがとう。

4

1 に答える 1

1

ファイルをデスクトップに保存するには、フルパスを使用する必要があります。次のように、を使用してパスを取得できますEnvironment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory

string targetFolder =  Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
string targetPath = Path.Combine(targetFolder, "Data.csv");

次に、フルパスでFileStreamを使用します。

fs = new FileStream(targetPath, FileMode.Create);

以下のコメントごとに編集

これの鍵は、ファイルを保存する場所へのパスを指定することです。ファイル名を指定するだけで、アプリケーションが実行しているディレクトリにそのファイルが配置されます。これを行う簡単な方法は、クラスのGetDirectoryNameメソッドを使用することです。Pathファイルが渡されたと仮定して、構成ファイルから読み取ったり、ハードコーディングしたりします。

文字列パス=Path.GetDirectoryName(sourceFile); string target = path + @ "\" + "Data.csv";

sourceFileがC:\ Data \ Input.xmlの場合、パスは「C:\ Data」に等しく、ターゲットはC:\ Data\Data.csvになります。

ここでの利点は、パスを使用してファイル名を渡すことができ、ターゲットファイルが常に同じ場所に配置されることです。これは、メソッドのパラメーター化に適しています。また、OpenFileDialogボックスまたは同様のメカニズムを使用してユーザーにファイルを選択させることもできます。

ジョンのコメントごとの追加編集

投稿したコードに基づいて、Data.xslファイルは実行中のアプリケーションのフォルダーにあります。その場合、次のことを行う必要があります。

fs = new FileStream("data.csv", FileMode.Create);

ファイルストリームは実行中のアプリケーションのディレクトリにも移動するため、パスをいじる必要はありません。

結局のところ、ソースファイルから入手できる情報(つまり、場所/パスデータ)を使用し、それをターゲットファイルのフルパスと名前に適用することがすべてです。

于 2012-10-04T05:58:48.550 に答える