Winform 拷贝文件到PDA,提示:正由另一进程使时用,因此该进程无法访问该文件。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Winform 拷贝文件到PDA,提示:正由另一进程使时用,因此该进程无法访问该文件。相关的知识,希望对你有一定的参考价值。

WinForm程序,窗体中有一个DataGridView,在窗体Load的时候,从一个data.db数据库文件读取数据绑定到DataGridView上,显示数据出来。有一个“同步”按钮,把data.db文件复制到PDA上,结果提示data.db文件正由另一进程使时用,因此该进程无法访问该文件。

代码如下:
private void Form1_Load(object sender, EventArgs e)


string DbName = "data.db";
string sql = "";
// 连接数据库
string connStr = "data source=" + DbName
+ ";Pooling=true;FailIfMissing=false";
SQLiteConnection conn =
new SQLiteConnection(connStr);
conn.Open();
SQLiteCommand cmd = new System.Data.SQLite.SQLiteCommand();
// 取出数据
sql = "SELECT * FROM
box";
cmd.CommandText = sql;
cmd.Connection =
conn;
dataAdapter = new SQLiteDataAdapter(cmd);

dataAdapter.Fill(dataSet, "tabBox");
dgvBox.DataSource =
dataSet.Tables["tabBox"];
cmd.Dispose();

dataAdapter.Dispose();
dataSet.Dispose();

conn.Close();
conn.Dispose();

/// <summary>
/// usb连接拷贝文件到指定路径xx

/// </summary>
public void Getkb()

//实例化对象

rapi = new RAPI();
//pc路径(源文件)
string
localFilePath = "";
//pda路径(拷贝到文件)
string
deviceFilePath = null;
//pc路径(源文件) 当前程序路径+那个文件

localFilePath = Application.StartupPath +
@"\boxdata.db";
//pda路径
deviceFilePath =
@"\Program Files\boxdata.db";
//提交

rapi.Connect();
//执行拷贝到xx 在这一步报错!

rapi.CopyFileToDevice(localFilePath, deviceFilePath, true);

//释放xx
rapi.Dispose();


求高手支招!

原因就是DataGridView上,显示的数据是从data.db数据库文件取的,它正在使用,所以不能复制的,就像我们平常正打开看一下word文件,的同时在进行拷贝是不可以的一样的,可以把数据读取到另一个数据库表里,进行拷贝,就可以了追问

用的是SQLite数据库,C#写的Winform应用程序。请问有没有类似读取到另一个数据库的代码?

追答

有,可以多给点分吗?

追问

当然可以,如果能够解决问题,多给些也是应该的。

追答

我直接文件发你邮箱里面,给个邮箱吧

追问

646673748@qq.com

参考技术A 文件data.db正在被其它程序使用,所以当前程序不能访问。你安装unlocker看看data.db被那个程序占用了,先停一下使用data.db的程序,再运行你的程序就可以了。 参考技术B 1确认PC数据库关闭
2,你这个源地址是PC上吗?这个地址有问题,应该是"c:\\boxdata.db";

.net 提示正由另一进程使用,因此该进程无法访问该文件

我再做一个上传下载系统,在电脑上存储了其他人上传的文件,已加密。下载做下载时要解密,解密后将要下载的文件存在另外一个文件夹里,然后再用 这段代码来下载文件,每次解密后点下载就会提示这个文件正在被另一进程使用,怎么办怎么办呢??我感觉是解密的时候把源文件存入了解密后的盘在占用进程??怎么解决呀
string fileName = "asd.txt";//客户端保存的文件名
string filePath = Server.MapPath("DownLoad/aaa.txt");//路径
FileInfo fileInfo = new FileInfo(filePath);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();

开发中往往遇到这样的情况就是第一次使用了文件但是用完了之后忘记释放这个资源导致下次再次使用的时候这个文件就被占了,你这边就就是因为资源没有释放的原因导致第二次就报错由另一进程使用,因此该进程无法访问该文件
所以要把资源释放了下次才能再使用
在后面加一句:fileInfo.Close();追问

http://zhidao.baidu.com/question/573269793.html 请帮我看看具体的 非常感谢。

参考技术A

System.IO.FileStream fs = new System.IO.FileStream(fileName,

System.IO.FileMode.Open)

这个方法打开文件的时候是以只读共享的方式打开的,但若此文件已被一个拥有写权限的进程打开的话,就无法读取了。

因此需要使用

System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open,System.IO.FileAccess.Read,FileShare.ReadWrite);

设置文件共享方式为读写,FileShare.ReadWrite,这样的话,就可以打开了。

参考技术B 你把右下角的那些像书本一样的都关了试试 目测是你上传和下载的文件没有完全的退出 所以才会这样 参考技术C 能否用Dispatcher之类的释放下资源?

以上是关于Winform 拷贝文件到PDA,提示:正由另一进程使时用,因此该进程无法访问该文件。的主要内容,如果未能解决你的问题,请参考以下文章

FileStram文件正由另一进程使用,该进程无法访问该文件,解决方法

IOException:进程无法访问pdf文件,因为它正由另一个进程使用

c# 读写文件时文件正由另一进程使用,因此该进程无法访问该文件

FileStream: 文件“XXX”正由另一进程使用,因此该进程无法访问此文件

c# 读写文件时文件正由另一进程使用,因此该进程无法访问该文件

该进程无法访问该文件,因为它正由另一个进程使用(文件已创建但不包含任何内容)