0

我有一个带有后台工作程序(bgw)的 Windows 窗体应用程序。此 bgw 执行一些任务,在这些任务中,有以下这些: 第 2 步 - 使用以下代码将文件从一个文件夹复制到另一个文件夹:

    public static void CopiarArquivos()
    {
        string fileName;
        string sourcePath = System.Windows.Forms.Application.StartupPath;
        const string targetPath = @"C:\CWEB\CwebIntegracaoMovel";

        if (sourcePath == targetPath) return;

        string destFile;

        // To copy a folder's contents to a new location: 
        // Create a new target folder, if necessary. 
        if (!Directory.Exists(targetPath))
        {
            Directory.CreateDirectory(targetPath);
        }

        if (Directory.Exists(sourcePath))
        {
            string[] files = Directory.GetFiles(sourcePath);
            //Invoke((MethodInvoker)(() => {

            //});
            // Copy the files and overwrite destination files if they already exist. 
            foreach (string s in files)
            {
                FileInfo fi = new FileInfo(s);

                // Use static Path methods to extract only the file name from the path.
                fileName = Path.GetFileName(s);
                destFile = Path.Combine(targetPath, fileName);
                if (!ArquivosIguais(s, destFile) &&
                    (!fileName.Contains("WizardIntegracao.exe") ||
                    (fileName.Contains("WizardIntegracao.exe") && !File.Exists(destFile))))
                {
                    fi.CopyTo(destFile, true);
                    //File.Copy(s, destFile, true);
                    //new System.Security.Permissions.FileIOPermission(
                    //    System.Security.Permissions.FileIOPermissionAccess.Read, new string[] { destFile }).Demand();
                }
            }
        }
    }

副本工作正常(有一些行被注释掉,因为我已经测试了一些其他的东西)在 bgw 的第 4 步中,我更改了在第 2 步中复制的 .config 文件的一些设置,代码如下:

public static void AlteraBaseAddress(string porta)
    {
        string path = "C:\\CWEB\\CwebIntegracaoMovel\\ServicoIntegracao.exe.config";
        string conteudo = File.ReadAllText(path);
        int inicio = conteudo.IndexOf("http://");
        int fim = conteudo.IndexOf("/ServicoIntegracao/Servico");
        conteudo = conteudo.Remove(inicio, fim - inicio);
        conteudo = conteudo.Insert(inicio, String.Format("http://localhost:{0}", porta));

        File.WriteAllText(path, conteudo);
    }

当我运行我的应用程序时,我得到了异常:

Ocorreu um erro no processo de instalação do serviço:
O acesso ao caminho 'C:\CWEB\CwebIntegracaoMovel\ServicoIntegracao.exe.config' foi negado..
   em System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   em 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)
   em System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
   em System.IO.StreamWriter.CreateFile(String path, Boolean append)
   em System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize)
   em System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding)

虽然尝试更改 .config 文件的内容时发生错误,但据我所知,复制文件时发生错误,它们被我自己的应用程序锁定,然后我无法覆盖它的内容。

有谁知道如何使这项工作?

4

1 回答 1

0

要更改应用程序配置,您应该使用 System.Configuration.Configuration 类。

有一个关于如何使用 Save 方法执行此操作的完整示例。

http://msdn.microsoft.com/en-us/library/ms134088.aspx

祝你的任务好运。

于 2013-07-29T20:43:40.917 回答