Dateinamen der Bildzitate umbennen

Steffen M. hinzugefügt 4 Jahren her
beantwortet

Hallo,

ich würde gerne die Dateinamen der Bildzitate umbenennen, da die standardmäßige Benennung "<Autor> <Jahr> - <Erstes Wort des Titels>" nicht aussagekräftig ist. Mit folgenden Code erhalte ich eine IOException.

public static class CitaviMacro
{
	public static void Main()
	{
		List<KnowledgeItem> knowledgeItemsList = Program.ActiveProjectShell.Project.AllKnowledgeItems.ToList();
		foreach (KnowledgeItem knowledgeItem in knowledgeItemsList)
		{
			if (knowledgeItem.KnowledgeItemType == KnowledgeItemType.File)
			{
				string bibtexKey = knowledgeItem.Reference.BibTeXKey;
				string coreStatement = knowledgeItem.CoreStatement;
				knowledgeItem.Address.Rename(bibtexKey + " - " + coreStatement);
			}
		}
	}
}
Fehlermeldung: 

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.IOException: The process cannot access the file because it is being used by another process.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileInfo.MoveTo(String destFileName)
   at SwissAcademic.Citavi.LinkedResource.Rename(String fileName, Boolean allowSameFilenameCloud)
   at CitaviMacro.Main()
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at SwissAcademic.Citavi.Shell.Controls.Editors.MacroEditorControl.Compile(Boolean run, Boolean generateExecutable)
Für Hilfe wäre ich dankbar.

Steffen

Beste Antwort
Foto

Hallo Jana,

ich habe das Makro selbst geschrieben. Ich konnte jetzt auch gerade das Problem identifizieren. Das Makro lässt sich ausführen, solange man nicht in der Spalte "Zitate, Kommentate" die Option "Kernaussage und Text anzeigen" aktiviert hat. Auch nach dem Deaktivieren dieser Option funktioniert das Makro nicht.

Anscheinend wird von Citavi die Bilddatei gelockt und nicht wieder freigegeben. Ggf. wäre dies auch ein Bug Report wert.

Grüße

Steffen


PS: Ich hatte die Dateiendung bei der Umbenennung vergessen. Hier nochmal das komplette Makro für andere Benutzer, welche das obige Makro benutzen wollen.

using System.Linq;
using System.Collections.Generic;
using SwissAcademic.Citavi;
using SwissAcademic.Citavi.Shell;

public static class CitaviMacro
{
	public static void Main()
	{
		List<KnowledgeItem> knowledgeItemsList = Program.ActiveProjectShell.Project.AllKnowledgeItems.ToList();
		foreach (KnowledgeItem knowledgeItem in knowledgeItemsList)
		{
			if (knowledgeItem.KnowledgeItemType == KnowledgeItemType.File)
			{
				string bibtexKey = knowledgeItem.Reference.BibTeXKey;
				string coreStatement = knowledgeItem.CoreStatement;
				knowledgeItem.Address.Rename(bibtexKey + " - " + coreStatement + ".jpg");
			}
		}
	}
}

Antworten (2)

Foto
1

Hallo Steffen,

vielen Dank für Ihre Nachricht.

Darf ich fragen, wo Sie den Code entdeckt haben?

Die Fehlermeldung deutet darauf hin, dass ein anderes Programm (das auch ein Virenscanner sein könnte) eine der umzubennenden Dateien gerade geöffnet hat:


"The process cannot access the file because it is being used by another process."

Bitte versuchen Sie es erneut.

Viele Grüße

Jana

Foto
1

Hallo Jana,

ich habe das Makro selbst geschrieben. Ich konnte jetzt auch gerade das Problem identifizieren. Das Makro lässt sich ausführen, solange man nicht in der Spalte "Zitate, Kommentate" die Option "Kernaussage und Text anzeigen" aktiviert hat. Auch nach dem Deaktivieren dieser Option funktioniert das Makro nicht.

Anscheinend wird von Citavi die Bilddatei gelockt und nicht wieder freigegeben. Ggf. wäre dies auch ein Bug Report wert.

Grüße

Steffen


PS: Ich hatte die Dateiendung bei der Umbenennung vergessen. Hier nochmal das komplette Makro für andere Benutzer, welche das obige Makro benutzen wollen.

using System.Linq;
using System.Collections.Generic;
using SwissAcademic.Citavi;
using SwissAcademic.Citavi.Shell;

public static class CitaviMacro
{
	public static void Main()
	{
		List<KnowledgeItem> knowledgeItemsList = Program.ActiveProjectShell.Project.AllKnowledgeItems.ToList();
		foreach (KnowledgeItem knowledgeItem in knowledgeItemsList)
		{
			if (knowledgeItem.KnowledgeItemType == KnowledgeItemType.File)
			{
				string bibtexKey = knowledgeItem.Reference.BibTeXKey;
				string coreStatement = knowledgeItem.CoreStatement;
				knowledgeItem.Address.Rename(bibtexKey + " - " + coreStatement + ".jpg");
			}
		}
	}
}

Antwort schreiben
 
Dateianlage anfügen (KEINE vertraulichen Dokumente!)