我想从C程序创建一个文件,并且想在我的C二进制文件中使用较长时间。但是我想以这样的方式创建文件:在我的C程序完成对文件的创建和解锁之前,没有人(可以使用vim或任何其他编辑器)打开和读取文件内容。
请提前帮助我。
这是我第一次与其他开发人员一起开发项目(现在只有两个).我们的想法是使用FTP/SFTP软件(如FileZilla)直接从服务器编辑文件.我们希望打开用于编辑的任何文件都被阻止,因此其他用户无法同时编辑它.这可能吗?如果没有FileZilla,也许使用其他软件?我看过Git,Codiad和其他类似的解决方案,但它们太复杂了(在GitHub中合并并发版本并不简单)或者有bug(Codiad没有保存文件).我们认为文件锁定是原始的,但对我们来说足够好(我们在同一个房间).问题是:我们如何实施它?
我的情况是;
我正在设计一个插件应用程序,基于动态加载插件程序集,多个用户可以运行托管在服务器机器上的应用程序。应用程序在启动时从我的实时更新服务器自动更新插件程序集。所以插件文件(及其附属 dll 不应该被锁定在文件系统上。
byte[] assemblyBytes = File.ReadAllBytes("asm-path");
var assembly = Assembly.Load(assemblyBytes);
Run Code Online (Sandbox Code Playgroud)
正如预期的那样没有锁定 dll 文件。但是如果我正在加载的 dll 本身具有静态引用 dll 呢?他们现在被锁定在文件系统上。
命名文件,让我们说;
PL1_S 和 PL_COMMON 也不应该像 PL1 和 PL2 程序集那样被锁定在文件中
关于如何解决这个问题的任何想法?
有没有办法,通过.Net或通过删除.Net中的Win32 API来访问Windows全局文件锁表?
我正在寻找一个更好的解决方案来确定一组文件是否被锁定,而不是检查每个单独的文件以查看是否已对其进行锁定.
由于我不会解释的原因(因为人们将在另一个主题上引导他们的回答,而不是我手头的问题),我需要知道如何确定我的H2数据库是否被锁定.使用Java代码,如何确定数据库中是否存在锁定文件?
使用java.nio.channels.FileLock在进程间锁定文件有多安全?据说如果我们有一个独占锁,其他进程就无法访问该文件.但是,关于另一个SO问题的下面答案表明其他进程也必须检查文件锁,以便我们的进程安全.
(a)您是否知道锁定文件不会阻止其他进程接触它,除非它们也使用锁?
所以我测试了我的代码并尝试使用Windows文本编辑器更改了一个我已经锁定的文件,并且我不会受到伤害,但是当我使用Notepad ++进行测试时却没有.
是否有在Java 6中正确锁定文件的解决方案?
我send_mail在Django 遇到了问题.它一直工作正常,直到我尝试更改某些电子邮件设置,以使其使用EMAIL_HOST_USER和EMAIL_HOST_PASSWORD.当我这样做时,我的测试电子邮件在哪里没有发送.
我恢复了原来的电子邮件设置,它确实有效,现在仍然没有发送电子邮件.我重新启动了一些东西以确保我当前的设置生效.当我运行命令'python manage.py send_mail'来测试我得到这个响应:
获得锁定...锁定已经到位.狭路相逢.
在查看mailer.engine中的代码时:
def send_all():
"""
Send all eligible messages in the queue.
"""
lock = FileLock("send_mail")
logging.debug("acquiring lock...")
try:
lock.acquire(LOCK_WAIT_TIMEOUT)
except AlreadyLocked:
logging.debug("lock already in place. quitting.")
return
except LockTimeout:
logging.debug("waiting for the lock timed out. quitting.")
return
logging.debug("acquired.")
start_time = time.time()
dont_send = 0
deferred = 0
sent = 0
Run Code Online (Sandbox Code Playgroud)
似乎因为它获得了"AlreadyLocked"异常,它会在不发送电子邮件的情况下退出.如果确实如此,我该如何打破这个锁并重新开始?
我正在处理 java.nio.file.AccessDeniedException 问题。
我有一个 Scala 程序,如果我这样做:
java.nio.file.Files.delete(FileSystems.getDefault().getPath("""D:\Users\Eric\Google Drive (New)\Music\Downloaded\Foreigner [Discography HQ]\1977 - Foreigner\03 - Starrider.mp3"""))
Run Code Online (Sandbox Code Playgroud)
一切正常。我有一些代码
def delete(path : Path) {
try {
println("deleting " + path)
java.nio.file.Files.delete(path)
} catch {
case exception: Exception => System.err.println(exception)
}
}
val google1 = FileSystems.getDefault().getPath("""D:\Users\Eric\Google Drive\Music\Downloaded\Foreigner [Discography HQ]""")
val google2 = FileSystems.getDefault().getPath("""D:\Users\Eric\Google Drive (New)\Music\Downloaded\Foreigner [Discography HQ]""")
val duplicates = TraversablePaths(List(google1, google2)).duplicateFilesList
println("deleting duplicate files")
duplicates.foreach(_.filter(!_.startsWith(google1)).foreach(delete))
Run Code Online (Sandbox Code Playgroud)
但是当我尝试删除同一个文件时,我得到
java.nio.file.AccessDeniedException: D:\Users\Eric\Google Drive (New)\Music\Downloaded\Foreigner [Discography HQ]\1977 - Foreigner\03 - Starrider.mp3
Run Code Online (Sandbox Code Playgroud)
我能说的最好的是 JVM 要么锁定了文件,要么锁定了文件所在的目录,但我不知道在哪里。检查文件是否相同的代码看起来像
def identical(file1 : Path, …Run Code Online (Sandbox Code Playgroud) 我正在制作一个Windows服务,部分使用FileStream和StreamWriter创建一个.eml/txt文件,它完美地工作,做我需要做的一切.唯一的问题是它所做的新文件由于某种原因后来仍被服务使用,我不知道为什么.任何线索?修复?
我认为它必须是与FileStream和StreamWriter相关的线条,因为它们是触及新文件的唯一东西.提前致谢!
Service1.cs
public partial class emlService : ServiceBase
{
Boolean _isRunning;
public emlService()
{
InitializeComponent();
if (!System.Diagnostics.EventLog.SourceExists("emlServiceSource"))
{
System.Diagnostics.EventLog.CreateEventSource(
"emlServiceSource", "emlServiceLog");
}
eventLog1.Source = "emlSerivceSource";
eventLog1.Log = "emlServiceLog";
}
protected override void OnStart(string[] args)
{
eventLog1.WriteEntry("In OnStart");
Thread NewThread = new Thread(new ThreadStart(runProc));
_isRunning = true;
//Creates bool to start thread loop
if (_isRunning)
{
NewThread.Start();
}
}
protected override void OnStop()
{
eventLog1.WriteEntry("In OnStop");
_isRunning = false;
}
protected override void OnContinue()
{
}
public void runProc()
{ …Run Code Online (Sandbox Code Playgroud)